【问题标题】:Rails - set default for nested model attributeRails - 为嵌套模型属性设置默认值
【发布时间】:2013-04-03 00:43:21
【问题描述】:

我正在构建一个嵌套模型表单,它允许客户端注册(客户端模型)并同时创建登录(用户模型)。但是,对于新注册者,我想设置 user.role_code(对管理员说“A”),但我一直在努力解决这个问题。从数据模型的角度来看,客户端有多个用户,因为注册后,客户端可以访问应用程序添加其他用户。从这个角度来看,我认为我不能在模型中默认 user_role,因为对于添加的用户,他们的 role_code 可能会有所不同。我想在控制器中设置默认值。

另外,表单提交后,用户作为数组发送,所以我想确保在注册时只发送一个用户数组对象(显然是出于漏洞原因)。

这是我的代码

#client registration form new.html
<%= form_for @client do |client_form| %>
.....
    <%= client_form.fields_for :users do |user_form| %>
        <div class="field">
            <%= user_form.label :first_name %>
            <%= user_form.text_field :first_name %>
        </div>  
.....       
#client Controller

  def create
    logger.info params.inspect
    @client = Client.new(params[:client])

    if @client.save
    ......   

#client model
class Client < ActiveRecord::Base

  attr_accessible :business_name, ... #and more
  attr_accessible :users_attributes

  has_many :users
  has_many :items

  accepts_nested_attributes_for :users, allow_destroy: true

#logger.info params.inspect
"...users_attributes"=>{"0"=>{"first_name"=>..." 

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:

    找到了!!!经过大量研究,谷歌搜索,拔掉我的头发,最后遇到Get nested params,答案如下:

    @client.users.first.role_code = "A"
    

    要测试用户数组对象的数量,请使用以下

    if @client.users.size != 1
    ...
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      相关资源
      最近更新 更多