Rails - 为嵌套模型属性设置默认值

时间:2013-04-03 00:43:21

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

我正在构建一个嵌套模型表单,允许客户端注册(客户端模型)并同时创建登录(用户模型)。但是,对于新的注册人,我想设置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"=>..." 

1 个答案:

答案 0 :(得分:0)

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

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

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

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