我有帖子模型和类别模型
class Category < ActiveRecord::Base
has_many :posts
attr_accessible :name
end
Class Post < ActiveRecord::Base
belongs_to :category
attr_accessible :comments, :title, :category_id, :user_id, :photo
end
我想要做的是在我的应用程序中使用@posts实例变量时重用(应用DRY原则)。我想我在某个地方陷入混乱。每个帖子都有自己的类别。
在我看来,我列出了所有类别
<% @categories.each do |c, v| %>
<li><%= link_to c, blog_path(:name => c) %></li>
<% end %>
控制器
def blog
if params[:month]
date = Date.parse("1 #{params[:month]}") # to get the first day of the month
@posts = Post.where(:created_at => date..date.end_of_month) # get posts for the month
elsif params[:name]
@posts = Post.where(:name => params[:name])
else
@posts = Post.all(:order => "created_at DESC")
end
@latest = Post.latest_posts
@posts_by_month = Post.all.group_by { |post| post.created_at.strftime("%B %Y") }
#Category Section down side of page
@categories = Category.all.group_by { |c| c.name }
end
我想要实现的是点击一个类别,然后它会显示属于该类别的所有帖子,点击类别链接时我得到
Mysql2::Error: Unknown column 'posts.name' in 'where clause': SELECT `posts`.* FROM `posts` WHERE `posts`.`name` = 'Ruby'
答案 0 :(得分:1)
你可以通过
来做到这一点<% @categories.each do |c| %>
<li><%= link_to c, blog_path(:category_id => c.id) %></li>
<% end %>
控制器中的
def blog
category_id = params[:category_id]
@category = Category.find(category_id)
@posts = @category.posts.order("posts.created_at DESC")
end
答案 1 :(得分:1)
您必须替换此行
@posts = Post.where(:name => params[:name])
与
category = Category.where(:name => params[:name]).first
@posts = category.posts