advanced search

I have a problem with the implementation of the search in the project

I have such models(bring a simplified version)

User id name

Friends user_id friend_id

Post id title author_id is_public

PostDeniedUser post_id user_id

some explanations:

User can create post. Post can be public or private. If post private only friends of author can see it post, but author can denied access to some friends.

I need to implement search Post by title considering visibility for each user.

some explanations:

User can search in all public posts, in private posts of his friends which are not denied in one query.

I think create some model SearchPost and like NewsFeed. duplicate all the data on posts for each user, taking into account the availability of, and then just make an inquiry with the search by title by authorized users

I think you can use rolify as you have dynamic permissions.

I can`t understand how it can help me?

I do not have different roles. All users have one role.

" but author can denied access to some friends. " << this is why it has dynamic roles on individual obejct

I think this almost my variant. Which is probably even more difficult. Because the query will be contain more JOINS

I need create role reader and then associate each post with each individual user

What do you think about this?

Dont worry about joins , you can use https://github.com/activerecord-hackery/squeel . I would probably do it this way

Post name , content , :access_type => “Public/Private”

PostAccess ( another model ) - user_id , post_id , :type = “Allowed / Denied”

Thanks. And how better to create access posts for users. After all, i need to create a relationship with each user. Delayed_job gem will be good?

Depends on the type of application. If you think the posts should be appear on the feed immediately after creating then dont go with delayed_job

But if in application will be about1000 or 10000 or more user i need do 1000 or 10000 or more insert queries. To set access for one post( access or denied). Or i not right underatand you?

:access_type => “Public/Private” :type = “Allowed / Denied”

if Public then no need to create access.

if Private create access only those who you want to show / hide