无法批量分配受保护的属性:学生

时间:2013-06-15 19:11:25

标签: ruby-on-rails ruby

class Student < ActiveRecord::Base
  attr_accessible :dob, :grade_status, :school_id

  belongs_to :school
end

class School < ActiveRecord::Base
  attr_accessible :location, :name

  has_many :students
end

class HomeController < ApplicationController
    def index
      @school = School.new
      @student = @school.students.build(params[:student])
      School.create(params[:school])
    end
end

3 个答案:

答案 0 :(得分:1)

在学校模型中添加accepts_nested_attributes_for :students并将:students_attributes添加到a​​ttr_accesible

答案 1 :(得分:0)

:students添加到您的attr_accessible列表中。并购买关于Rails的书。

答案 2 :(得分:0)

看起来您的params哈希包含“学校”键内的“学生”键。这准确吗?它看起来像这样:

{ school: { name: 'Foo', location: 'Bar', students: [...] } }

我会假设是这种情况。您应该使用嵌套属性,添加:

accepts_nested_attributes_for :students

到您的学校模型。同时将students_attributes添加到学校模型中的attr_accessible行。

在您的视图中,您需要使用fields_for帮助程序,以便Rails可以在您的参数中构建students_attributes密钥。它看起来像这样:

form_for @school do |f|
   f.text_field :name
   f.text_field :location
   f.fields_for :students do |builder|
     builder.text_field :dob
     ...

(这应该全部在ERB,Haml或你正在使用的任何地方)

以下是嵌套表单上的Railscast:http://railscasts.com/episodes/196-nested-model-form-part-1如果您仍然遇到问题。