因此,在我正在构建的这个小rails应用程序中,我有一个嵌套形式的自由职业者和行业。问题是,当我试图创建一个新的自由职业者,并保存它,它节省一切,除了商号。
这就是我的控制器的样子:
class FreelancersController < ApplicationController
def index
@freelancers = Freelancer.all
end
def show
@freelancer = Freelancer.find(params[:id])
end
def new
@freelancer = Freelancer.new
@trade = Trade.new
end
def create
@freelancer = Freelancer.new
@freelancer.firstname = params[:freelancer][:firstname]
@trade = Trade.new
@trade.name = params[:trade_attributes]
@trade.save
@freelancer.trade = @trade
@freelancer.save
redirect_to freelancer_path(@freelancer)
end
private
def freelancer_params
params.require(:freelancer).permit(:firstname, trade_attributes: [:id, :name])
end
end这是我的表格:
<%= form_for(@freelancer) do |f| %>
<p><%= f.label :firstname %></br>
<%= f.text_field :firstname %></p>
<%= f.fields_for :trade do |trade| %>
<p><%= trade.label :type %>
<%= trade.text_field :name %></p>
<% end %>
<%= f.submit "New Freelancer" %>
<% end %>自由职业者模式:
class Freelancer < ActiveRecord::Base
belongs_to :trade
accepts_nested_attributes_for :trade
end贸易模式:
class Trade < ActiveRecord::Base
has_many :freelancers
end对于自由职业者,它保存id、名字和trade_id。为了交易,它只会保存身份。没有设置名称。我原以为@freelancer.trade = @trade会起作用,因为它在控制台中没有错误,而且实际上保存了所有东西。因此,我不知道如何让它保存在应用程序本身的名称。
发布于 2014-05-12 20:02:33
您正在尝试的是大规模的分配,但您还没有让Rails为您自由地完成这一任务。在您的create操作中,您应该这样做:
def create
freelancer = Freelancer.create(freelancer_params)
redirect_to freelancer_path(freelancer)
end那应该是你所需要的。
FYI:在您的代码中,您设置了@trade.name = params[:trade_attributes],但params[:trade_attributes]最有可能返回nil。我非常肯定,:trade_attributes将是params[:freelancer]内部的一个关键嵌套。
有关Rails中大量分配的更多信息:http://code.tutsplus.com/tutorials/mass-assignment-rails-and-you--net-31695 (请注意,关于attr_protected和attr_accessible的讨论与您无关,因为您在Rails 4上使用了强参数。本文最后对Rails 4进行了更新)。
https://stackoverflow.com/questions/23617724
复制相似问题