3

私は simple_form を使用しています。カテゴリテーブルを使用して、カテゴリと記事の間の関連付けを作成したいだけです。

しかし、私はこのエラーがあります:保護された属性を一括割り当てできません:category_ids。app/controllers/articles_controller.rb:36:in `アップデート'

article_controller.rb

def update
    @article = Article.find(params[:id])
      if @article.update_attributes(params[:article]) ---line with the problem
        flash[:success] = "Статья обновлена"
        redirect_to @article
      else
        render :edit
      end
end

記事.rb

has_many :categorizations
has_many :categories, through: :categorizations

カテゴリ.rb

has_many :categorizations
has_many :articles, through: :categorizations

categorization.rb

belongs_to :article
belongs_to :category

カテゴリ化には、article_id フィールドと category_id フィールドがあります。

私の _form.html.erb

<%= simple_form_for @article, html: { class: "form-horizontal", multipart: true } do |f| %>
  <%= f.error_notification %> 
  <%= f.input :title %>
  <%= f.association :categories %>
  <%= f.input :teaser %>
  <%= f.input :body %>
  <%= f.input :published %>
 <% if @article.published? %>
   <%= f.button :submit, value: "Внести изменения" %>
 <% else %>
   <%= f.button :submit, value: "Опубликовать" %>
  <% end %>
<% end %>
4

2 に答える 2

5

article.rb に attr_accessible がありますか?

もしそうなら追加

     attr_accessible :title, :category_ids

また、すべてのフォームでこれが本当に必要であることを確認してください...そうでない場合は、これを追加してください:

  attr_accessible :title, :category_ids, :as => :admin

それから

@article = Article.new
@article.assign_attributes({ :category_ids => [1,2], :title => 'hello' })
@article.category_ids # => []
@article.title # => 'hello'

@article.assign_attributes({ :category_ids => [1,2], :title => 'hello' }, :as => :admin)
@article.category_ids # => [1,2]
@article.title # => 'hello'
@article.save

また

@article = Article.new({ :category_ids => [1,2], :title => 'hello' })
@article.category_ids # => []
@article.title # => 'hello'

@article = Article.new({ :category_ids => [1,2], :title => 'hello' }, :as => :admin)
@article.category_ids # => [1,2]
@article.title # => 'hello'
@article.save
于 2012-07-15T16:58:38.143 に答える
3

によって作成されたフォームフィールド

<%= f.association :categories %>

属性を設定しようとしていますcategory_idが、属性は保護されています。モデルでは、次のようなコード行が必要です。

attr_accessible :title, :teaser, :body, :published

これらの属性は、一括割り当てが許可されています。フォームを設定category_idする場合は、これらの属性をattr_accessibleメソッドに追加する必要があります。

attr_accessible :title, :teaser, :body, :published, :category_id

これで問題が解決するはずです。

于 2012-07-15T16:57:41.600 に答える