我的用户通过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"}}}
答案 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}}字段添加隐藏字段。