Ruby on rails 通过表单编辑从另一个控制器通过嵌套属性创建数据

Ruby on rails 通过表单编辑从另一个控制器通过嵌套属性创建数据,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,nested-attributes,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,Nested Attributes,我正在尝试通过编辑表单添加值​​更改其他控制器中的操作。我有以下型号: 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_attribute

我正在尝试通过编辑表单添加值​​更改其他控制器中的操作。我有以下型号:

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
我的控制器是:

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

我试图使用嵌套属性,但似乎我应用了错误的方法,有人能帮你通过编辑日期表单找到一个销售人员并将其关联起来吗?

我会尝试替换

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

与:



要获得正确的表单生成器。

salesmen\u controller.rb中应该是这样的,我不确定您在强参数中使用的是什么。请尝试并相应地修改它

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

嗯…我试过了,但我得到了相同的错误…参数丢失或值为空:saller…和params请求:{“utf8”=>“✓", "真实性令牌“=>”/KrtqGY6QK0l28t/lnupr8cuh51eeggg6fbcitkg5hrgw4s2eexc9sreiduzy5tzbuxautahegsdr727hqnw==”,“day”=>{“value”=>“400”,“day”=>{“saller”=>{“name”=>“Denis”}>,“commit”=>“Create”,“company id”=>“3}您的数据是嵌套的:
“day”=>“value”=>“400”,“day”=>“saller”=>“saller”{saller”{
因此,请反映这一点以获取它的工作成果。但有了这一点,我就可以创建Saleser,而不是day值​​未更新,DaySeller表也未更新…似乎您已经给出了点击创建操作的url,因此请提供更新的url。您可以使用rake RouteSMM检查url…以防我将表单重定向到更新销售人员?但我没有设置任何销售人员。
<%= 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
<%= f.fields_for :salesman do |fff| %>
<%= ff.fields_for :salesman do |fff| %>
  def params_salesman
    params.require(:day).require(:day_salesman).require(:salesman).permit(:name).merge(company_id: params[:company_id])
  end