如何在Post的节目页面上制作节目类别?

时间:2016-05-03 19:02:04

标签: ruby-on-rails ruby

刚才问过这个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>

么?谢谢。

4 个答案:

答案 0 :(得分:0)

试试这个:

<%= @post.categories.map(&:name) %>

答案 1 :(得分:0)

如果帖子为has_many :categories,则您无法进行单数@post.category。您将不得不迭代它们以显示它们,或者加入它们,因为您将使用数组。

答案 2 :(得分:0)

  

未定义的方法类别&#39;对于#Post:0x007fc239bad260

postcategory的关联为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中。这很简单。我把它放进去的那一刻,这个类别出现了。