-1

他のコントローラのアクションに値を追加するための編集フォームを試しています。私は多くの従業員を持つことができ、多くの従業員がその日の一部とすることができる日を持っている、言い換えればネストされた属性を介して別のコントローラからフォーム編集でデータを作成

class Day < ApplicationRecord 
    belongs_to :goal 
    has_many :day_salesmen, dependent: :destroy 
    has_many :salesmen, through: :day_salesmen 
    validates_presence_of :date_day, :goal_id 

    accepts_nested_attributes_for :day_salesmen 
end 

class Salesman < ApplicationRecord 
    belongs_to :company 
    has_many :goal_salesmen, dependent: :destroy 
    has_many :goals, through: :goal_salesmen 

    has_many :day_salesmen, dependent: :destroy 
    has_many :days, through: :day_salesmen 

end 

class DaySalesman < ApplicationRecord 
    belongs_to :day 
    belongs_to :salesman 

    accepts_nested_attributes_for :salesman 
end 

:私は、次のモデルを持っています。

私はその日を編集するときに、day_salesmanテーブルを介して従業員を追加し、それらを私の日に関連付けることが可能であることを望みます。

私はこれをやろうとしているが、私は、次のエラーログを取得:

ActionController::ParameterMissing (param is missing or the value is empty: salesman): 

app/controllers/salesmen_controller.rb:49:in `params_salesman' 
app/controllers/salesmen_controller.rb:17:in `create' 
    Rendering /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout 
    Rendering /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb 
    Rendered /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (32.8ms) 
    Rendering /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb 
    Rendered /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (28.5ms) 
    Rendering /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb 
    Rendered /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (53.3ms) 
    Rendered /box/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (216.0ms) 
Started POST "/companies/3/salesmen" for 172.24.0.1 at 2017-10-31 15:21:09 +0000 
Cannot render console from 172.24.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by SalesmenController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"/5ULp1WOehoaJIZL0SaCSDYU9MssS7ZQ5EfyTkmZCyFSvogj6lOtxOTuNTx8AjdeRjAnkkd3XhD5V30/QAXijg==", "day"=>{"value"=>"400", "day_salesman"=>{"salesman"=>{"name"=>"Denis"}}},"commit"=>"Create","company_id"=>"3"} 
    [1m[36mOwner Load (3.5ms)[0m [1m[34mSELECT "owners".* FROM "owners" WHERE "owners"."id" = $1 ORDER BY "owners"."id" ASC LIMIT $2[0m [["id", 1], ["LIMIT", 1]] 
Completed 400 Bad Request in 108ms (ActiveRecord: 12.7ms) 

私のコントローラは、次のとおりです。

class SalesmenController < ApplicationController 
    before_action :find_salesman, only: [:edit, :update, :destroy, :show] 

    def index 
    @salesman = current_owner.companies.find(params[:company_id]).salesman 
    end 

    def new 

    end 

    def show 

    end 

    def create 
    @salesman = Salesman.new(params_salesman) 
    if @salesman.save 
     flash[:notice] = "Salesman saved!" 
    else 
     flash.now[:error] = "Cannot create salesman!" 
     render :new 
    end 
    end 

    def edit 
    end 

    def update 
    if @salesman.update(params_salesman) 
     flash[:notice] = "salesman updated!" 
    else 
     flash.now[:error] = "Could not update salesman!" 
     render :edit 
    end 
    end 

    def destroy 
    @salesman.destroy 
    end 

    private 

    def find_salesman 
    @salesman = Salesman.find(params[:id]) 
    end 

    def params_salesman 
    params.require(:salesman).permit(:name).merge(company_id: params[:company_id]) 
    end 
end 

DaysController:

class DaysController < ApplicationController 
    before_action :find_day, only: [:show, :edit, :update] 

    def index 
    @day = current_owner.companies.find(params[:company_id]).goal.find(params[:goal_id]).days 
    end 

    def show 
    end 

    def edit 
    @dayup = Day.new 
    @day_salesmen = @dayup.day_salesmen.build 
    @salesman = @day_salesmen.build_salesman 
    end 

    def update 
    if @day.update(params_day) 
     flash[:notice] = "Day updated!" 
     redirect_to company_salesman_path(:id => @day.id) 
    else 
     flash.now[:error] = "Could not update day!" 
     render :edit 
    end 
    end 

    private 

    def find_day 
    @day = Day.find(params[:id]) 
    end 

    def params_day 
    params.require(:day).permit(:value, day_salesman_attributes: [:id, salesman_attributes:[:name]]).merge(goal_id: params[:goal_id]) 
    end 
end 

マイビューの編集コントローラの日数:

<%= form_for(@dayup, url: company_salesmen_path) do |f| %> 
    <%= f.label :value_of_day %> 
    <%= f.number_field :value %> 
    <%= f.fields_for :day_salesman do |ff| %> 
    <%= ff.fields_for :salesman do |fff| %> 
     <%= fff.label :names_of_salesmen %> 
     <%= fff.text_field :name %> 
    <% end %> 
    <% end %> 
    <%= f.submit "Create" %> 
<% end %> 

私のルートは以下のとおりです。

Rails.application.routes.draw do 
    root to: 'companies#index' 
    resources :companies do 
    resources :salesmen 
    resources :goals do 
     resources :days 
    end 
    end 
    devise_for :owners, :controllers => { registrations: 'registrations' } 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
end 

私は、ネストされた属性を使用しようとしているが、私は間違った方法を適用していますようにそれはそう、誰かがあなたが日の編集フォームを通じてセールスマンを得るのを助けることができますそれらを関連付ける?

<%= ff.fields_for :salesman do |fff| %> 

が適切なフォームビルダを取得するには:

答えて

1

salesmen_controller.rbでは、このようにする必要があります。強いパラメータでは何を使用しているのかわかりません。試してみるとaccordinly

def params_salesman 
    params.require(:day).require(:day_salesman).require(:salesman).permit(:name).merge(company_id: params[:company_id]) 
    end 
+0

が反映されます。しかし、私はセールスマンを作成しなければならない、その日の値は更新されておらず、日曜のテーブルも... –

+0

あなたはアクションを作成するためにヒットするURLを与えているようですので、更新のためURLを提供してください。 – Gabbar

+0

ええええええええええええええええええええええええええええ:しかし、私はセールスマンを設定する必要はありません。 –

1

私がしようとして

<%= f.fields_for :salesman do |fff| %> 

を置き換えます。

+0

ハムをそれを修正...私が試したが、私は...のparamsが欠落しているか、値が空の同じエラーを得てください:セールスマン...とのparams要求:{ "UTF8 "=>" ✓」、 "authenticity_token" => "/ KrtqGY6QK0l28t/LnUpr8cUh51uEegxG6FbCtIkg5hRgW4s2eeXc9sReAiDUZy5tzBUxAUtAHEGsdR727hqNw =="、 "日" => { "値" => "400"、 "day_salesman" => { "セールスマン" => { "commit" => "作成"、 "company_id" => "3"} –

+0

データはネストされています: '' day "=> {" value "=>" name "=>" Denis "}} "400"、 "day_salesman" => {"salesman" => {"name" 'これを反映させるためには – apneadiving

関連する問題