-1

레일을 사용하는 일종의 웹 기반 게임에서 일하고 있습니다. 내 목표는 사용자가 사용자 업데이트 양식을 통해 사용자/쇼 페이지에 요새를 만들 수있는 양식을 설정하는 것입니다. 중첩 된 특성 및 연결을 사용하여 문제를 해결하려고했지만 오류가 계속 발생합니다.허용되지 않은 매개 변수 Whitlisted 특성에 대한 오류

나는 이와 같은 내 모델 연결을 설정 한 :

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 

내 양식 사용자/프로그램보기는 다음과 같습니다.

<%= 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 

사이함에 의해 한 나는 다른 프로토콜을 보았다. 다른 스택 오버 플로우 스레드. 모든 순열은 효과가 없었다.

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) 

나는 내 I의 점선 내 T의 교차하지만 지금은 확신 내 잘못을 찾으려고 내 머리를 뽑아 내고있어. 너희들이 줄 수있는 어떤 도움이라도 영원히 내 감사로 보답 될 것이다. 내가 상상할 수있는 유일한 문제는 사용자/쇼보기에 업데이트 양식을 넣는 것입니다.하지만 할 수있는 일은 거의 확실합니다. 당신이 당신의 User 모델 has_many :forts과 관련,이 라인을 따라

다시 한 번 감사드립니다,

알렉스 P

답변

0

매개 변수 이름이 user_params 방법과 일치하지 않습니다. 하나는 fort이고 다른 하나는 forts입니다.중첩 된 속성은 연결 이름과 일치해야합니다 fields_for에 전달 된 이름을 작동하려면 또한

(즉, :forts

이것은 forts_attributes 키 아래에있는 요새에 대한 매개 변수가 발생합니다 (그리고 그래서 가야 무엇인가 user_params으로 변경했지만 fields_for으로 변경 한 경우에만)

+0

고마워요. 아직 거래를 할 수 없습니다. 저장하지만 오류가 사라졌습니다. 아마 그것을 알아낼 수있을 것입니다. 감사합니다 Logged – obventio56

0

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

내가이 원인이되는 것 같아요

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

을해야한다 너를위한 문제.

+0

이 답변은 맞습니다. 다른 답변이 먼저 나와있는 것 같습니다. – obventio56

관련 문제