Rails 4 - Has_many,使用嵌套表单编辑特定记录

时间:2014-07-12 19:19:53

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

我的用户通过User_Accounts模型拥有多个帐户。 User_Accounts模型还跟踪其他信息,例如管理员和计费访问。通过用户编辑表单,我希望能够编辑用户当前帐户的管理和计费布尔字段。

user.rb

class User < ActiveRecord::Base

  has_one :owned_account, class_name: 'Account', foreign_key: 'owner_id'
  has_many :user_accounts
  has_many :accounts, through: :user_accounts

  accepts_nested_attributes_for :user_accounts

end

user_account.rb class UserAccount&lt;的ActiveRecord ::基

  belongs_to :account
  belongs_to :user
end

在用户控制器中,我通过嵌套表单指定了我想编辑的user_account,并将其分配给@user_account实例变量。

users_controller.rb

  def edit
    @user = User.find(params[:id])
    @user_account = @user.user_accounts.find_by_account_id(current_account)
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
      redirect_to @user, notice: 'User was successfully updated.'
    else
      render action: "edit" 
    end
  end

  private

    def user_params
      params.require(:user).permit(:name, :email, user_accounts_attributes: [:admin, :billing] )
    end

用户/ edit.html.erb

    <%= f.fields_for :user_accounts, @user_account do |o| %>
        <%= o.check_box :admin, class: 'checkbox' %>
    <% end %>

当我提交更改时,它会成功保存用户记录,但不会更新User_account记录。它似乎通过了以下内容:

{"name"=>"Colin 21", "email"=>"mike21@example.com", "user_accounts_attributes"=>{"0"=>{"admin"=>"1"}}}

2 个答案:

答案 0 :(得分:0)

ID需要通过accepts_nested_attributes_for编辑对象。似乎不允许通过强参数使用id属性。

尝试更改“users_controller.rb&#39;

中的user_params方法
def user_params
  params.require(:user).permit(:name, :email, user_accounts_attributes: [:id, :admin, :billing] )
end

答案 1 :(得分:0)

您还需要在表单的user account部分内为id的{​​{1}}字段添加隐藏字段。