2013-08-02 3 views
0

У меня есть модель сообщений и модель категорииПоказать все сообщения своей категории

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 

То, что я пытаюсь сделать, это повторное использование (применять DRY принцип) при использовании переменной @posts экземпляра в моем приложении. Я думаю, что я где-то попал в путаницу. Каждый пост имеет свою собственную категорию.

На мой взгляд, у меня есть все категории, перечисленные

<% @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

вы до сих пор не указано ваша проблема? :) –

+0

ive добавлено небольшое обновление до дна вопроса, но я подумал, что это довольно прямолинейно? Я хочу нажать на ссылку категории, т. е. Ruby, а затем отобразить все сообщения, имеющие эту категорию – Richlewis

+0

Кажется, что в вашей таблице posts нет столбца имен. Вы добавили colum и выполнили миграцию? – Santhosh

ответ

1

Вы должны заменить эту строку

@posts = Post.where(:name => params[:name]) 

с

category = Category.where(:name => params[:name]).first 
@posts = category.posts 
1

Вы можете сделать i т symply по

<% @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 
+0

спасибо, я могу поместить это в мой elsif? – Richlewis

Смежные вопросы