Не удается массово назначить защищенные атрибуты: tags_attributes? - PullRequest
6 голосов
/ 25 февраля 2012

Я пытаюсь создать теги для постов, следуя Rails Guide :

tag.rb:

class Tag < ActiveRecord::Base
  attr_accessible :name

  belongs_to :post
end

post.rb:

class Post < ActiveRecord::Base
  attr_accessible :title, :content, :tags

  validates :title,   :presence => true,
                      :length   => { :maximum => 30 },
                      :uniqueness => true
  validates :content, :presence => true,
                      :uniqueness => true

  belongs_to :user

  has_many :comments, :dependent => :destroy
  has_many :votes, :as => :votable, :dependent => :destroy 
  has_many :tags

  accepts_nested_attributes_for :tags, :allow_destroy => :true,
    :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end

просмотры / сообщения / _form.html.erb:

<% @post.tags.build %>
<%= form_for(@post) do |post_form| %>
  <%= render 'shared/error_messages' %>
  <div class="field">
    <%= post_form.label :title %><br />
    <%= post_form.text_field :title %>
  </div>
  <div class="field">
    <%= post_form.label :content %><br />
    <%= post_form.text_area :content %>
  </div>
  <h2>Tags</h2>
  <%= render :partial => 'tags/form',
             :locals => {:form => post_form} %>
  <div class="actions">
    <%= post_form.submit %>
  </div>
<% end %>

Вид / метки / _form.html.erb:

<%= form.fields_for :tags do |tag_form| %>
  <div class="field">
    <%= tag_form.label :name, 'Tag:' %>
    <%= tag_form.text_field :name %>
  </div>
  <% unless tag_form.object.nil? || tag_form.object.new_record? %>
    <div class="field">
      <%= tag_form.label :_destroy, 'Remove:' %>
      <%= tag_form.check_box :_destroy %>
    </div>
  <% end %>
<% end %>

Но я получаю эту ошибку при попытке создать теги:

Невозможно массово назначить защищенные атрибуты: tags_attributes Rails.root: / Главная / Алекс / Рельсы / r7

Трассировка приложений | Framework Trace | Полная трассировка app / controllers / posts_controller.rb: 25: запрос `create '

Параметры:

{ "utf8" => "✓", "Authenticity_token" => "VF / qlfZ4Q5yvPY4VIbpFn65hoTAXdEa4fb4I1Ug4ETE =", "post" => {"title" => "post номер 5", "content" => "post номер 5 post номер 5 сообщение номер 5 "," tags_attributes "=> {" 0 "=> {" name "=>" еда, напитков "}}}," commit "=>" Создать сообщение "}

Есть предложения, чтобы это исправить?

Ответы [ 4 ]

13 голосов
/ 25 февраля 2012

Просто поместите: tags_attributes вместо: tags.Пожалуйста, обратитесь ниже.Это решит проблему, с которой я столкнулся

class Post < ActiveRecord::Base
 attr_accessible :title, :content, :tags_attributes
end
6 голосов
/ 21 мая 2012

Это сработало для меня:

class Post < ActiveRecord::Base
  attr_accessible :name, :title, :content, :tags_attributes
end
6 голосов
/ 25 февраля 2012

Attr_accessible указывает, что вы не можете массово назначать атрибуты. Здесь вам также нужно сделать post_id как attr_accessible. Пожалуйста, обратитесь ПРЕДУПРЕЖДЕНИЕ: Не удается назначить массово защищенные атрибуты

1 голос
/ 16 февраля 2013

Это сработало и для меня:

class Post < ActiveRecord::Base
  attr_accessible :title, :content, :tags_attributes
end

Это позволяет вам получить доступ к атрибутам тегов через Post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...