ruby-on-rails - Rails 4 嵌套形式 "Unpermitted Parameters"在其他任何地方都没有回答

标签 ruby-on-rails ruby parameters nested-forms nested-attributes

无论我尝试什么,我的嵌套表单都无法正常工作,我搜索了所有 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/

相关文章:

android - 在 HttpAsyncTask().execute() 中传递参数

ruby-on-rails - 为什么Rails调用当前版本(4.2.0)中不存在的方法?

javascript - 如何在 beforeSend 事件中修改 ajax Post 数据?

ruby - 优化 Ruby 数组或哈希

ruby - Teamcity 部署到 Heroku

带参数的 Java 私有(private)构造函数

ruby-on-rails - 使用 OAuth 作为 Rails webapp API 身份验证?

mysql - 一次查询 ActiveRecord 的记录和关系计算

ruby - RVM 不适合我

C++:将int的地址作为参数传递