-1

我正在使用rails的一種基於web的遊戲。我的目標是設置一個表單,允許用戶通過用戶更新表單在用戶/展示頁面上創建一個堡壘。我一直在使用嵌套屬性和關聯來試圖解決這個問題,但我一直在遇到錯誤。未被允許的參數錯誤的Whitlist屬性

我在模型建立的社團,如這樣的:

class Fort < ActiveRecord::Base 

    belongs_to :user 

end 


class User < ActiveRecord::Base 

    has_many :forts 

    accepts_nested_attributes_for :forts 

... (omitted validations) 

end 

而且我已經設置了我的用戶控制器,更新和編輯的操作是這樣的:

def edit 

    @user = User.find(params[:id]) 

end 

def update 

    @user = User.find(params[:id]) 

    @user.forts.build(params[:user][:forts]) 

    if @user.update_attributes(user_params) 

    render @user 


    else 

     render 'users/show' 

    end 
end 

我在表users/show view看起來像這樣:

<%= form_for @user do |f| %> 

    <%= f.fields_for :fort do |builder| %> 
     <%= builder.label :name, "Name" %> 
     <%= builder.text_field :name %> 
     <%= builder.label :ownership, "Ownership" %> 
     <%= builder.text_field :ownership %> 
    <% end %> 
    <%= f.submit %> 
<% end %> 

我的路線(我不認爲它們在這裏很重要,但只是萬一),

BR::Application.routes.draw do 
    resources :users 
    resources :sessions, only: [:new, :create, :destroy] 
    resources :forts 
    resources :encampments 

    root 'home#home' 
    match '/signup', to: 'users#new',   via: 'get' 
    match '/signin', to: 'sessions#new',   via: 'get' 
    match '/signout', to: 'sessions#destroy',   via: 'delete' 

最後我的參數被寫成這樣:

def user_params 

     params.require(:user).permit(:name, :email, :username, :password, :password_confirmation, forts_attributes: [ :name, :xco, :yco, :territory, :ownership ]) 

    end 

我已經在上面

def user_params 

     params.require(:user).permit(:name, :email, :username, :password, :password_confirmation, forts_ids: [ :name, :xco, :yco, :territory, :ownership ]) 

    end 

def user_params 

     params.require(:user).permit(:name, :email, :username, :password, :password_confirmation, :forts => [ :name, :xco, :yco, :territory, :ownership ]) 

    end 
基於

之間搖搖欲墜我見過不同的協議o其他堆棧溢出線程。沒有一個排列工作。

他們都拋出此錯誤日誌:

Unpermitted parameters: fort 

整個過程是這樣的:

Started PATCH "https://stackoverflow.com/users/1" for 127.0.0.1 at 2014-09-04 20:35:02 -0400 
Processing by UsersController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"srybKv+WDZubO4ez+kiwfTYZvrP4tZYe9QoxQaMgmPk=", "user"=>{"fort"=>{"name"=>"test2", "ownership"=>"43"}}, "commit"=>"Update User", "id"=>"1"} 
    User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "1"]] 
Unpermitted parameters: fort 
    (0.1ms) begin transaction 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]') AND "users"."id" != 1) LIMIT 1 
    (0.1ms) rollback transaction 
    Rendered users/show.html.erb within layouts/application (49.2ms) 
    User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = '0705e5d60cc1be62fa51d8e407683e79f730a3b2' LIMIT 1 
Completed 200 OK in 173ms (Views: 66.1ms | ActiveRecord: 5.1ms) 

我敢肯定我點綴我的我的,越過我的T的,但現在我拉我的頭髮試圖找到我的錯誤。任何幫助,你們可以給予,將永遠與我的謝意回報。我仍然可以想象的唯一問題是我在用戶/表演視圖中放置了一個更新表單,但我幾乎可以肯定這是一件很好的事情。再次

感謝,

亞歷克斯·P

回答

0

您的參數名稱與您的user_params方法中的內容不符:一個有fort,另一個有forts

此外,嵌套屬性的工作傳遞給fields_for名稱必須與協會名稱相匹配(即:forts

這將導致堡壘的forts_attributes項下作爲參數(因此這就是應該去到user_params,但只有一次,你改變了電話fields_for

+0

這工作。謝謝噸!我仍然無法獲得交易保存,但錯誤消失了,我可能會弄清楚,謝謝 – obventio56 2014-09-05 11:08:19

0

當你在你的User模型has_many :forts關係,此行

<%= f.fields_for :fort do |builder| %> 

應該

<%= f.fields_for :forts do |builder| %> 

我想這是造成你的問題。

+0

這是正確的,但我想其他答案是第一次。謝謝你 – obventio56 2014-09-05 11:09:02