相关疑难解决方法(0)

Rails 4.0 Strong Parameters嵌套属性,带有指向哈希的键

我正在玩Rails 4.x beta并尝试使用carrierwave获取嵌套属性.不确定我正在做的是正确的方向.搜索后,最后查看导轨源和强参数,我发现了下面的注释.

# Note that if you use +permit+ in a key that points to a hash,
# it won't allow all the hash. You also need to specify which
# attributes inside the hash should be whitelisted.
Run Code Online (Sandbox Code Playgroud)

https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb

所以它说你必须在has中指定每一个单独的属性,我尝试了以下内容:

帕拉姆的例子:

{"utf8"=>"?",
 "authenticity_token"=>"Tm54+v9DYdBtWJ7qPERWzdEBkWnDQfuAQrfT9UE8VD=",
 "screenshot"=>{
   "title"=>"afs",
   "assets_attributes"=>{
     "0"=>{
       "filename"=>#<ActionDispatch::Http::UploadedFile:0x00000004edbe40
                      @tempfile=#<File:/tmp/RackMultipart20130123-18328-navggd>,
                      @original_filename="EK000005.JPG",
                      @content_type="image/jpeg",
                      @headers="Content-Disposition: form-data; name=\"screenshot[assets_attributes][0][filename]\"; filename=\"EK000005.JPG\"\r\nContent-Type: image/jpeg\r\n">
     }
   }
 },
 "commit"=>"Create Screenshot"}
Run Code Online (Sandbox Code Playgroud)

调节器

def screenshot_params
  params.require(:screenshot).permit(:title,
    :assets_attributes => [:filename => [:@tempfile,:@original_filename,:@content_type,:@headers] 
Run Code Online (Sandbox Code Playgroud)

以上不是"工作"(它不触发载波)但是当我使用我发现的标准嵌套示例时,我不再收到错误(未经许可的参数:文件名):

def screenshot_params
  params.require(:screenshot).permit(:title, assets_attributes: :filename)
Run Code Online (Sandbox Code Playgroud)

如果有人能提供帮助就会很棒.我无法找到嵌套了一个指向哈希的键的示例.

ruby ruby-on-rails strong-parameters ruby-on-rails-4

34
推荐指数
3
解决办法
4万
查看次数

Rails 5.1 - 允许JSON参数,但仍然在日志中打印为未允许

在Rails 4中,这是关于如何做到这一点的问题.我想知道的是,虽然这有效,但为什么日志还在抱怨?

在Rails 5.1.3中,我有一个JSON列(letterhead)作为我的模型属性之一(并且里面的json是一个具有各种属性的哈希,我不关心白名单).我只是想让列本身允许/列入白名单.

关于Rails的注意事项5.1.4

在5.1.4中有一种Rails方法可以做到这一点,请参阅此提交.有一个相当长的讨论在这里关于这个github上.在Rails 5.1.4中,它只是这样:

def account_params
  params.require(:account).permit(:id, :name, :plan_id, letterhead: {})
end
Run Code Online (Sandbox Code Playgroud)

:letterhead允许该参数,日志中不显示错误,模型保存.但显然它允许在该参数内任意输入,因此请小心使用.

如果您确实想限制在这样的参数中允许哪些哈希键,那么您也可以将这些哈希值列入白名单,例如:

def account_params
  params.require(:account).permit(:id, :name, :plan_id, letterhead: [:address, :logo, :contact_info])
end
Run Code Online (Sandbox Code Playgroud)

这现在可以防止任何其他任意键,:letterhead因为我明确地只允许这些3 -:address, :logo, :contact_info

Rails 5.1.3(及更早版本)

我可以使用以下任一方式允许此列(有关其他可能选项,请参阅链接的讨论):

选项1

def account_params
  params.require(:account).permit(:id, :name, :plan_id, :letterhead).tap do |whitelisted|
    whitelisted[:letterhead] = params[:account].fetch(:letterhead, ActionController::Parameters.new).permit!
  end
end
Run Code Online (Sandbox Code Playgroud)

选项2

def account_params
  params.require(:account).permit(:id, :name, :plan_id, :letterhead).tap do |whitelisted|
    whitelisted[:letterhead] = params[:account][:letterhead].permit!
  end
end …
Run Code Online (Sandbox Code Playgroud)

parameters json ruby-on-rails whitelist

6
推荐指数
1
解决办法
570
查看次数

在嵌套属性上没有将符号隐式转换为整数

我在编辑嵌套属性时遇到问题。我收到此错误:

no implicit conversion of Symbol into Integer
Run Code Online (Sandbox Code Playgroud)

事件.rb:

Class Event < ActiveRecord::Base
  has_many :event_joins, :dependent => :destroy
  accepts_nested_attributes_for :event_joins
end
Run Code Online (Sandbox Code Playgroud)

events_controller.rb :

private
   def event_params
     params.require(:event).permit(event_joins_attributes: [:duration]) 
   end
Run Code Online (Sandbox Code Playgroud)

_form.html.erb :

 =f.fields_for :event_joins_attributes do |a|
    =number_field_tag 'event[event_joins_attributes][duration]'
 end
Run Code Online (Sandbox Code Playgroud)

如果我改变了我params之前的许可

params[:event][:event_joins_attributes][:duration] = params[:event][:event_joins_attributes][:duration].to_i
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

no implicit conversion of String into Integer
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多关于大规模分配的嵌套属性的帖子,但没有任何效果。这是我读过的部分帖子。

强参数允许所有属性用于嵌套属性

rails-4-strong-parameters-nested-objects

白名单属性

当然,我不想做

params.require(:event).permit!
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nested-attributes strong-parameters ruby-on-rails-4

1
推荐指数
1
解决办法
4929
查看次数