【问题标题】:Rails 4 nested forms and strong parametersRails 4 嵌套表单和强参数
【发布时间】:2015-07-27 16:57:30
【问题描述】:

我无法让 Accepts_nested_attributes_for 在 Rails 4 中使用强参数。这是错误

Processing by CityaddressesController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cx9nunLAsHkvo/Z8vKnWFnrub1LpmUgVNdePcQ9VDSQ=", "cityaddress"=>{"st_unit"=>"1", "st_num"=>"1", "st_prefix"=>"E", "name"=>"1", "st_type"=>"ST", "st_postalcode"=>"", "description"=>"", "cityaccount"=>{"name"=>"1", "description"=>"1"}}, "commit"=>"Create Cityaddress"}
  [1m[36mUser Load (0.0ms)[0m  [1mSELECT  `users`.* FROM `users`  WHERE `users`.`id` = 3 LIMIT 1[0m
Unpermitted parameters: cityaccount

这是模型:

class Cityaddress < ActiveRecord::Base
    has_many :cityaccounts
    has_many :license_plates
    accepts_nested_attributes_for :cityaccounts, allow_destroy: true

    def street_address
      return "#{st_unit} #{st_num} #{name} #{st_type} #{st_prefix}"
    end
    def address
      return "#{st_unit}#{st_prefix} #{name} #{st_type} #{st_num} "
    end
end

这是控制器:

  # GET /cityaddresses/new
  def new
    @cityaddress = Cityaddress.new
    @streets = Street.where("active=1").order("display_order")
    @cityaddress_accounts = @cityaddress.cityaccounts.build
  end

    def cityaddress_params
      params.require(:cityaddress).permit(:st_unit, :st_num, :st_prefix, :name, :st_type, :st_postalcode, :description, cityaccounts_attributes: [:name, :description, :id])
    end 

这是视图:

<%= f.fields_for @cityaddress_accounts do |ff| %>
   <div class="field">
     <%= ff.label :name %>
     <%= ff.text_field :name %><br>
   </div> 
   <div class="field">
     <%= ff.label :description %>
     <%= ff.text_field :description %><br>
   </div>  
<% end %>

我认为这与强参数语法有关?

干杯。

【问题讨论】:

    标签: ruby-on-rails nested-forms strong-parameters


    【解决方案1】:

    我认为您必须稍微改变一下视图。

    尝试更改此设置

    <%= f.fields_for @cityaddress_accounts do |ff| %>
    

    <%= f.fields_for :cityaccounts do |ff| %>
    

    【讨论】:

    • 那行得通。谢谢。不过,我想知道为什么。我没有创建 :cityaccounts 变量...
    • 这是您需要定义的关联名称,因为它是一个嵌套属性。
    【解决方案2】:

    似乎都正确,但请尝试在 Controller 中执行此操作:

      def new
        @cityaddress = Cityaddress.new
        @streets = Street.where("active=1").order("display_order")
        @cityaddress.cityaccounts.build
      end
    

    【讨论】:

    • 谢谢。这并没有破坏任何东西,我猜@cityaddress_accounts 变量是多余的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多