2014-07-12 69 views
0

我有一個通過User_Accounts模型擁有多個賬戶的用戶。 User_Accounts模型還會跟蹤其他信息,例如管理和結算訪問。通過用戶編輯表單,我希望能夠編輯用戶當前帳戶的管理和帳單布爾字段。Rails 4 - Has_many,使用嵌套表單編輯規範記錄

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 類UserAccount <的ActiveRecord ::基地

belongs_to :account 
    belongs_to :user 
end 

在用戶控制器,I指定其中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"=>"[email protected]", "user_accounts_attributes"=>{"0"=>{"admin"=>"1"}}} 

回答

0

需要通過accept_nested_attributes_for編輯對象的Id。似乎通過強參數不允許id屬性。

嘗試改變user_params法「users_controller.rb」

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

您需要內形式的fields_for部分添加一個隱藏字段爲user accountid場了。

相關問題