“不能大规模指派保护属性”嵌套保护模式(“Can't mass-assign protect

2019-09-22 07:34发布

我有一个时间试图让这个嵌套模式工作。 我试过多元化/奇异的所有方式,完全移除attr_accessible,谁知道还有什么。

restaurant.rb:

# == RESTAURANT MODEL
#
# Table name: restaurants
#
#  id         :integer          not null, primary key
#  name       :string(255)
#  created_at :datetime         not null
#  updated_at :datetime         not null
#

class Restaurant < ActiveRecord::Base
  attr_accessible :name, :job_attributes

  has_many    :jobs
  has_many    :users, :through => :jobs
  has_many    :positions

  accepts_nested_attributes_for :jobs, :allow_destroy => true

  validates :name, presence: true

end

job.rb:

# == JOB MODEL
#
# Table name: jobs
#
#  id            :integer          not null, primary key
#  restaurant_id :integer
#  shortname     :string(255)
#  user_id       :integer
#  created_at    :datetime         not null
#  updated_at    :datetime         not null
#

class Job < ActiveRecord::Base
  attr_accessible :restaurant_id, :shortname, :user_id

  belongs_to    :user
  belongs_to    :restaurant
  has_many      :shifts


  validates :name, presence: false

end

restaurants_controller.rb:

class RestaurantsController < ApplicationController

  before_filter :logged_in, only:  [:new_restaurant]

  def new
    @restaurant = Restaurant.new
    @user = current_user
  end

  def create
    @restaurant = Restaurant.new(params[:restaurant])
    if @restaurant.save
      flash[:success] = "Restaurant created."  
      redirect_to welcome_path
    end
  end

end

new.html.erb:

<% provide(:title, 'Restaurant') %>

  <%= form_for @restaurant do |f| %>
        <%= render 'shared/error_messages' %>

        <%= f.label "Restaurant Name" %>
        <%= f.text_field :name %>

        <%= f.fields_for :job do |child_f| %>

              <%= child_f.label "Nickname" %>
              <%= child_f.text_field :shortname %>

        <% end %>

        <%= f.submit "Done", class: "btn btn-large btn-primary" %>

  <% end %>

输出参数:

{"utf8"=>"✓",
 "authenticity_token"=>"DjYvwkJeUhO06ds7bqshHsctS1M/Dth08rLlP2yQ7O0=",
 "restaurant"=>{"name"=>"The Pink Door",
 "job"=>{"shortname"=>"PD"}},
 "commit"=>"Done"}

我收到的错误是:

ActiveModel::MassAssignmentSecurity::Error in RestaurantsController#create

Cant mass-assign protected attributes: job
Rails.root: /home/johnnyfive/Dropbox/Projects/sa

Application Trace | Framework Trace | Full Trace
app/controllers/restaurants_controller.rb:11:in `new'
app/controllers/restaurants_controller.rb:11:in `create'

任何人有任何线索如何得到这个工作? 谢谢!

Answer 1:

在restaurant.rb:

它应该是attr_accessible :name, :jobs_attributes而不是attr_accessible :name, :job_attributes



Answer 2:

关于你的最后的评论:您可以将您的工作表单内提交USER_ID,应提交USER_ID到模型



文章来源: “Can't mass-assign protected attributes” with nested protected models