6

Rails を使用して新しい製品を作成しており、すべての製品にカテゴリを追加したいと考えています。

製品、カテゴリ、およびカテゴリ (製品とカテゴリの関係を格納する) の 3 つのテーブルがあります。ネストされた属性を使用して分類の作成を管理しようとしていますが、新しい製品でも分類テーブルを更新できるように、コントローラーとビュー/フォームを更新する方法がわかりません。

ここに私のモデルがあります:

class Product < ActiveRecord::Base
 belongs_to :users
 has_many :categorizations
 has_many :categories, :through => :categorizations
 has_attached_file :photo
 accepts_nested_attributes_for :categorizations, allow_destroy: true

 attr_accessible :description, :name, :price, :photo

 validates :user_id, presence: true

end


class Category < ActiveRecord::Base
 attr_accessible :description, :name, :parent_id
 acts_as_tree
 has_many :categorizations, dependent: :destroy
 has_many :products, :through => :categorizations

end


class Categorization < ActiveRecord::Base
  belongs_to :category
  belongs_to :product
  attr_accessible :category_id, :created_at, :position, :product_id

end

これが私の新しい製品コントローラーです。

def new
    @product = Product.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @product }
    end
  end

そして、ここに私のビューフォームがあります:

<%= form_for @product, :html => { :multipart => true } do |f| %>
  <% if @product.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>

      <ul>
      <% @product.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_field :description %>
  </div>
  <div class="field">
    <%= f.label :price %><br />
    <%= f.number_field :price %>
  </div>
<div class="field">
<%= f.file_field :photo %>
</div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

新しい製品が追加されたときに製品と分類テーブルの両方が更新されるようにするには、コントローラーをどのように更新すればよいですか? ビュー ファイルを更新して、カテゴリがドロップダウン メニューに表示されるようにするにはどうすればよいですか?

4

4 に答える 4

4

商品に has_many カテゴリがあることがわかりました。製品の作成・編集時にユーザーが指定できるようにするのは当然です。1 つのアプローチをここで説明します(チェックボックスを使用して製品にカテゴリを割り当てます)。別の方法: 通常どおり製品を作成し、編集ページでカテゴリを追加/削除できるようにします。

 cat_1 [+]
 cat_2 [-]
 cat_3 [+]

より美しい方法でそれを行うためのこのようなRailcastsも見てください.

于 2012-05-14T18:02:37.007 に答える
0

RailsCastsからのネストされたモデルフォームのチュートリアル 多分あなたを助けるかもしれません、あるいは多分それは他の誰かを助けるでしょう。

于 2012-05-14T18:10:33.897 に答える
0

これは、_form.html で私の製品ビュー ファイルに追加したものです。これにより、製品ごとに複数のカテゴリを選択するために使用できる複数のチェック ボックスが作成されました。

</div class="field">
<% Category.all.each do |category| %>
<%= check_box_tag "product[category_ids][]", category.id %>
<%= label_tag dom_id(category), category.name %><br>
<% end %>
于 2012-05-23T01:36:07.473 に答える
0

まず、ビューファイルにカテゴリを表示するには、次のようなものを使用してドロップダウンにカテゴリを表示します

<%= select_tag("category_id[]", options_for_select(Category.find(:all).collect { |cat| [cat.category_name, cat.id] }, @product.category.collect { |cat| cat.id}))%>

次に、製品コントローラーの create メソッドで、次のようなことを行います

@product = Product.create(params[:category])
@product.category = Category.find(params[:category_id]) if params[:category_id]

これがお役に立てば幸いです。
ありがとう。

于 2012-05-14T07:36:39.613 に答える