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