刚才问过这个question,但是因为我能够半解决它所以已经改变了。
意识到提出一个新问题而不是将其添加到我之前的问题中可能会更好。
如何显示在帖子的显示页面中选择的类别?
发布_form.html.erb
<%= form_for(@post) do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :body %><br>
<%= f.text_area :body %>
</div>
<div class="field">
<%= select("post", "category_ids", Category.all.collect { |p| [p.name, p.id] }) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
发布模型
class Post < ActiveRecord::Base
has_many :categorizations
has_many :categories, :through => :categorizations
has_many :comments, as: :commentable
end
类别模型
class Category < ActiveRecord::Base
has_many :categorizations
has_many :posts, :through => :cateogorizations
end
分类模型
class Categorization < ActiveRecord::Base
belongs_to :post
belongs_to :category
end
我正在尝试将其添加到Post的显示页面,以便显示。
发布消息
<p id="notice"><%= notice %></p>
<p>
<strong>Title:</strong>
<%= @post.title %>
</p>
<p>
<strong>Body:</strong>
<%= @post.body %>
</p>
<ul>
<%= render(partial: 'comments/comment', collection: @post.comments) %>
</ul>
<h3>Add Comments!</h3>
<%= form_for [@post, Comment.new] do |f| %>
<%= f.text_area :body, placeholder: "Add a comment" %><br />
<%= f.submit "Add Comment" %>
<% end %>
<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %>
<br/>
<%= link_to 'Posts Index', posts_path %>
我试过这样做:
<p>
<strong>Category:</strong>
<%= @post.category.name %>
</p>
但我得到的只是undefined method category' for #<Post:0x007fc239bad260>
么?谢谢。
答案 0 :(得分:0)
试试这个:
<%= @post.categories.map(&:name) %>
答案 1 :(得分:0)
如果帖子为has_many :categories
,则您无法进行单数@post.category
。您将不得不迭代它们以显示它们,或者加入它们,因为您将使用数组。
答案 2 :(得分:0)
未定义的方法类别&#39;对于#Post:0x007fc239bad260
post
与category
的关联为has_many :categories, :through => :categorizations
,因此调用@post.category
无法正常工作。相反,您需要致电@post.categories
。以下代码应该可以使用
<p>
<strong>Category:</strong>
</p>
<% @post.categories.each do |c| %>
<%= c.name %>
<% end %>
答案 3 :(得分:0)
原因是我没有将category_ids
放在posts_controller的post_params
中。这很简单。我把它放进去的那一刻,这个类别出现了。