Я новичок в рельсах и программировании в целом, и я все обернулся.У меня есть пользовательские записи, в которых они добавляют тег категории к сообщению, тег категории является логическим атрибутом модели сообщения, например: music,: boolean,: default => false.
Я бы хотел, чтобы у пользователя была ссылка на "Музыка", которая отображает новую страницу со всеми сообщениями, где: music => true.Теперь я понимаю, как создать переменную и выполнить блок постов, таких как @music_posts = Post.where (: music => true), но я запутался в том, как сделать маршрут / posts / music, и яне уверен насчет моего метода def music_posts.Любое объяснение помощи будет с благодарностью.
rout.rb
resources :posts do
member do
get :likers
end
collection do
get :search
end
end
resources :users do
member do
get :following, :followers, :likes
end
end
root :to => "pages#home"
class PagesController
def home
@title = "Home"
@featured_posts = Post.featured.limit(10)
if user_signed_in?
@user = current_user
@post = current_user.posts.build
@feed_items = current_user.feed.paginate(:per_page => "10", :page => params[:page])
#render :layout => 'special_layout'
end
end
end
класс PostsController
before_filter :authenticate_user!, :only => [:create, :edit, :update, :destroy]
before_filter :authorized_user, :only => [:destroy, :edit, :update]
def create
@user = current_user
@post = current_user.posts.build
if @post.update_attributes(params[:post])
flash[:success] = "Post created!"
redirect_to root_path
else
@feed_items = current_user.feed.paginate(:per_page => "10", :page => params[:page])
render 'pages/home'
end
end
def index
@posts = Post.paginate(:page => params[:page])
end
end
end
def show
@post = Post.find(params[:id])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to(post_path(@post), :notice => 'Post was successfully updated.') }
else
format.html { render :action => "edit" }
end
end
end
def destroy
@post.destroy
redirect_to root_path
end
def likers
@title = "Likers"
@post = Post.find(params[:id])
@likers = @post.likers.paginate(:page => params[:page])
render 'show_likers'
end
def music_posts
@music_posts = Post.where(:music => true)
render 'show_music_posts'
end
private
def authorized_user
@post = Post.find(params[:id])
redirect_to root_path unless current_user?(@post.user)
end
end
Редактировать: попытка
маршрутов
enter code here
сопоставить 'posts / category / * tag' => 'posts # category'
контроллер сообщений
def categories
if params[:tag].present?
@posts = Post.where('#{params[:tag]} = ?', true).paginate(:page => params[:page])
end
render 'categories'
end
Мне нужен пользовательский вид, чтобы показать их, это все правильно?