无论我尝试什么,我的嵌套表单都无法正常工作,我搜索了所有 StackExchange 以寻找解决这个看似简单的问题的方法。这就是我现在要让它在 View 中显示出来的地方。
表单正在使用事件 Controller 从非静态位置创建操作,因此使用全局变量(页面 Controller ,具有特定页面,其中生成表单)。提交嵌套表单时会生成我的票证模型,并且会传递事件 ID,但它不会填写票证模型的“名称”字段,因为它显示“Unpermitted Parameters: Ticket”。但是它们在事件 Controller 中被定义为白名单!啊!我认为表格有问题,但我尝试的任何方法似乎都不起作用。
如有任何帮助,我们将不胜感激。
* 现在可用的更新代码 *
表单.html.erb:
<div class="form-inputs">
<%= simple_form_for @event, :html => { :class => 'form-horizontal' } do |f| %>
<div class="row">
<div class="col-xs-6">
<%= f.input :name, class: "control-label" %>
</div>
</div>
<div class="row">
<div class="col-xs-6">
<%= f.simple_fields_for :tickets do |ticket| %>
<%= ticket.input :name %>
<% end %>
</div>
</div>
<div class="form-actions">
<%= f.button :submit, :class => 'btn-primary' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
launchpad_path, :class => 'btn btn-default' %>
<% end %>
</div>
</div>
事件 Controller .rb
def new (this is totally skipped and unnecessary)
@event = Event.new
@ticket = @event.tickets.build
end
def create
@event = current_user.events.build(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Your event was created.' }
else
format.html { render :new }
end
end
end
def event_params
params.require(:event).permit(:name, tickets_attributes: [ :name, :id, :event_id, :_destroy ])
end
Pages_Controller.rb(表单来源
def new
@event = Event.new
@ticket = @event.tickets.build
end
事件.rb
class Event < ActiveRecord::Base
# Database Relationships
has_many :tickets, dependent: :destroy
accepts_nested_attributes_for :tickets, :allow_destroy => true
end
门票.rb
class Ticket < ActiveRecord::Base
belongs_to :event
end
路线.rb
resources :events do
resources :tickets
end
最佳答案
除了来自 Alejandro 的信息(这是正确的),您还有 f.simple_fields_for @ticket, ...
而您应该有 f.simple_fields_for :tickets, .. .
如果您检查 log/development.log
中的 Processing by EventsController#create
之后的行将是 Parameters:
行,由于 fields_for
错误,您会看到已发送的参数位于 :ticket
键下,而不是 :tickets_attributes
键下.
解决这个问题,permit
行应该没问题。
更新
希望您意识到在 fields_for
之后您根本不需要 @ticket = @event.tickets.build(event_params[:ticket_attributes])
行也是固定的。得益于 accepts_nested_attributes_for
助手,所有关联的 tickets
的设置都是通过 Event
对象完成的。
关于ruby-on-rails - Rails 4 嵌套形式 "Unpermitted Parameters"在其他任何地方都没有回答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29158499/