“无法使用嵌套的受保护模型批量分配受保护的属性”

时间:2012-09-12 03:20:17

标签: ruby-on-rails ruby nested-attributes mass-assignment

我有时间试图让这个嵌套模型正常工作。我已经尝试了所有方式的复数/单数,完全删除了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'

任何人都有任何线索如何让它发挥作用?谢谢!

2 个答案:

答案 0 :(得分:3)

在restaurant.rb:

它应该是   attr_accessible :name, :jobs_attributes 代替   attr_accessible :name, :job_attributes

答案 1 :(得分:0)

关于你的上次评论: 您可以在作业表单中提交user_id,该user_id应该将user_id提交给模型