【问题标题】:How do I make nested_attributes work in Rails3?如何使嵌套属性在 Rails 3 中工作?
【发布时间】:2010-12-24 11:09:22
【问题描述】:

这是我的用户模型:

class User < ActiveRecord::Base
  has_one :teacher, :dependent => :destroy
  accepts_nested_attributes_for :teacher, :allow_destroy => true
  attr_accessible :email, :password, :password_confirmation, :remember_me, :teacher_attributes
end

这是我的教师模型:

class Teacher < ActiveRecord::Base
  belongs_to :user
  attr_accessible :user_id, :first_name, :last_name
  validates_presence_of :user_id, :first_name, :last_name
end

这是我的表格:

<%= form_for(@user, :url => registration_path(:user)) do |user| %>


        <%= user.text_field :email %>
        <%= user.text_field :password %>
        <%= user.text_field :password_confirmation %>


    <%= user.fields_for resource.build_teacher do |t| %>
            <%= t.text_field :first_name %>
            <%= t.text_field :last_name %>
            <%= t.text_field :phone %>
    <% end %>

      <%= user.submit 'Confirm' %>
<% end %>

除了这个东西不会“接受嵌套属性” 我的开发日志说:

WARNING: Can't mass-assign protected attributes: teacher

我不知道它是否相关,但表单没有在teacher_attributes 数组或任何东西内生成字段 - 它在teacher.我猜这就是我的问题所在,但我不知道如何让它把字段放在里面。请帮忙。

谢谢!

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-3 nested-attributes


    【解决方案1】:

    试试这些:

    在视图顶部:

    <% @user.build_teacher if @user.teacher.nil? %>
    

    对于以下字段:

    <%= user.fields_for :teacher do |t| %>
    

    另外,就个人而言,我喜欢将表单中的块参数(|user||t|)命名为 |form|(因为当您度过漫长的一天时,您会在下面看到 user查看而不是form,它会让你感到困惑!)

    【讨论】:

    • 我爱你。我现在真的流泪了。为什么这条线花了我 4 个小时的生命?为什么YYYYYY?
    • 有时您需要第二双眼睛,结果却是一个如此简单的问题。我也遇到过同样的情况,我意识到,如果你退后一步做其他事情,然后再回到问题上,目的是分析而不是四处寻找,那么它会有很大帮助!当然,没有什么能比得上几本关于 Rails 的好书了。
    • +1 那个。我所需要的只是一些睡眠,然后事情开始变得更快。感谢您提供有用的答案和良好的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多