Я получил большую помощь от Кандада Боггу по моему последнему вопросу и очень, очень благодарен за это. Поскольку мы были похоронены в комментариях, я хотел разорвать эту часть.
Я пытаюсь создать тег в блоге, посвященном рельсам, который я разрабатываю. Отношение: Post has_many: теги и Tag принадлежит_to: post. Добавление и удаление тегов к сообщениям работает отлично.
В моем /view/posts/index.html.erb есть раздел под названием теги, в котором я успешно опрашиваю таблицу тегов, группирую их и отображаю счетчик рядом с именем тега (в качестве примечания я ошибочно назвал столбец, содержащий имя тега, 'tag_name' вместо просто 'name', как я должен был). Кроме того, отображение этих групп является ссылкой, которая ссылается на метод индекса в PostsController. Вот где проблема.
При переходе к / posts вы получаете сообщение об ошибке, поскольку не передается ни один параметр (без нажатия на ссылку группы тегов). У меня есть .empty? там, так что не уверен, что здесь происходит не так. Вот ошибка и код:
Error
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.empty?
/ просмотров / сообщений / index.html.erb
<% @tag_counts.each do |tag_name, tag_count| %>
<tr>
<td><%= link_to(tag_name, posts_path(:tag_name => tag_name)) %></td>
<td>(<%=tag_count%>)</td>
</tr>
<% end %>
PostsController
def index
@tag_counts = Tag.count(:group => :tag_name, :order => 'updated_at DESC', :limit => 10)
@posts=Post.all(:joins => :tags,:conditions=>(params[:tag_name].empty? ? {}:
{ :tags => { :tag_name => params[:tag_name] }}
)
)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @posts }
format.json { render :json => @posts }
format.atom
end
end