-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