标签: strong-parameters

当空数组时,嵌套属性的强参数返回"未允许的参数"

假设用户模型使用带有strong_parameters的Rails4.

class User < ActiveRecord::Base
  has_secure_password

 accepts_nested_attributes_for :identity

//  rest of code omitted for brevity
end
Run Code Online (Sandbox Code Playgroud)

如果我参考指南我应该能够做到

def user_params
    params.require(:user).permit(:email, identity_attributes: [])
end
Run Code Online (Sandbox Code Playgroud)

允许每个identity_attribute的mass_assignment,无论其名称或编号如何.但这是在"未经许可的参数:identity_attributes"中运行的

但是,如果我指定identity_attributes它是有效的

def user_params
    params.require(:user).permit(:email, identity_attributes: [:last_name, :first_name])
end
Run Code Online (Sandbox Code Playgroud)

我在Identity中有很多属性,我可以通过User对它们进行mass_assign,而不指定所有属性.

我错过了什么吗?这是一个错误吗?

干杯

strong-parameters ruby-on-rails-4

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

Spree 3.0在扩展中添加了允许的属性

所以我正在制作一个狂欢扩展,其中我有自己的属性,我Spree::Shipment在结帐过程中添加并添加了一个输入,问题是我的属性不是出货的允许属性的一部分,并且不清楚如何将其添加到允许的属性中.我找到了这个拉动请求的对话,据说要使用

Spree::PermittedAttributes.shipment_attributes << :my_custom_attribute
Run Code Online (Sandbox Code Playgroud)

但是,目前还不清楚我在哪里放这个!?

"哦,把它放进去spree.rb"

这没有用.我试过把这段代码放进去

lib/spree.rb
lib/spree/permitted_attributes.rb
lib/spree_decorator.rb
lib/spree/permitted_attributes_decorator.rb
Run Code Online (Sandbox Code Playgroud)

(如此处所示)并且所有这些都导致错误抱怨shipment_attributes未被定义(因此可能是在PermittedAttributes评估主文件定义之前运行代码)或者根本没有任何反应.我应该在哪里放置此代码以将我的属性添加到允许的属性列表中?


编辑:由于这对人们来说似乎不清楚,我已经尝试了我发布的链接中列出的所有内容.告诉我尝试其中的东西是非常令人愤怒的.别那样做.

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

9
推荐指数
2
解决办法
1599
查看次数

8
推荐指数
2
解决办法
2400
查看次数

Rails:带嵌套和强力参数的照片上传(回形针)

背景:

我正在尝试使用带有Paperclip gem的Strong Params将照片上传添加到广告模型,其中Photo是一个单独的模型"has_attached_file":upload,我在调用forms_for(实际上是semantic_forms_for,因为我正在使用Formtastic)广告#new视图将图像上传到Photo实例.Params看起来不错,但我想我在控制器中遗漏了一些东西.尽管多次迭代控制器代码,但仍无法使其工作.我需要做些什么才能让它发挥作用?

非常感谢任何提示或指示!谢谢

-

广告模型:

class Ad < ActiveRecord::Base
  belongs_to :user

    ##edited out irrelevant associations

  has_many :photos, dependent: :destroy
  accepts_nested_attributes_for :photos, :allow_destroy => true
  default_scope { order("created_at DESC") }
  #validates_presence_of :user_id, :make, :model, :km, :year, :location
end
Run Code Online (Sandbox Code Playgroud)

-

照片型号:

 class Photo < ActiveRecord::Base
      belongs_to :ad
      has_attached_file :upload, :styles => { :main => "600x500>", 
                                                                                    :thumb => "60x45>" }, 
      :default_url => "http://placehold.it/600x500&text=nice+wheels!"
    end
Run Code Online (Sandbox Code Playgroud)

AdsController

class AdsController < ApplicationController

    def create
        @ad = Ad.new(ad_params)
      @ad.user_id = current_user.id
      @photo = @ad.photos.build
        if …
Run Code Online (Sandbox Code Playgroud)

file-upload ruby-on-rails paperclip nested-forms strong-parameters

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

如何在Rails 4中干净地更新HABTM关联列表?

我正在尝试User使用关联列表更新记录Addresses,通过has连接并属于许多关联.

我通过javascript发送的请求正文是:

{"id":10,"name":"John Smith", "address_ids":[4,8]}
Run Code Online (Sandbox Code Playgroud)

这是我在Rails 服务器日志中得到的:

在2013-10-03 16:30:43 +0200开始PUT"/ api/users/10"为127.0.0.1

由Api :: UsersController处理#update为HTML

参数:{"id"=>"10","name"=>"John Smith","address_ids"=> [4,8],"user"=> {"id"=>"10","name" "=>"John Smith"}}

上面要注意的是address_ids数组没有user根据日志将其变为哈希.

控制器中我使用强参数并更新User如下:

attributes = params.require(:user).permit(:id, :name, {:address_ids => []}) 
@user.update_attributes(attributes)
Run Code Online (Sandbox Code Playgroud)

问题是属性在更新时不包含address_ids,因此关联的记录不会更新.

临时解决方案

我已经解决了这个问题,手动将address_ids密钥分配给attributes他们从强参数检查后回来,如下所示:

attributes = params.require(:user).permit(:id, :name, {:address_ids => []})
if params.has_key?(:address_ids)   
  attributes[:address_ids] = params[:address_ids] 
end
@user.update_attributes(attributes)
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在我看来这不是它应该如何工作?为什么adderss_ids没有自动分配?如何以明确的方式实施?

ruby-on-rails has-and-belongs-to-many strong-parameters ruby-on-rails-4

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

Rails 4强参数嵌套对象中的嵌套数组

这个问题部分回答了我的问题.作者使用类似的json结构..

我的问题:如何在嵌套对象中允许嵌套数组?我有一个Contribution模特has_many Features.我正在尝试创建GeoJSON多边形.在coordinates保持为空

这是我发送的JSON

{
  "contribution": {
    "features_attributes": [
      {
        "geojson": {
          "type": "Feature",
          "properties": {},
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  7.263336181640625,
                  52.07190953840937
                ],
                [
                  7.263336181640625,
                  52.135173926548894
                ],
                [
                  7.404785156249999,
                  52.135173926548894
                ],
                [
                  7.404785156249999,
                  52.07190953840937
                ],
                [
                  7.263336181640625,
                  52.07190953840937
                ]
              ]
            ]
          }
        }
      }
    ],
    "title": "324",
    "description": "23"
  }
}
Run Code Online (Sandbox Code Playgroud)

目前我的许可证代码如下:

params.require(:contribution).permit(
  :title,
  :description,
  features_attributes: [
    { geojson: [
        :type,
        { geometry: [
            :type,
            #{ coordinates: [] } …
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails polygon geojson strong-parameters

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

使用StrongParameters处理缺少必需参数的最佳方法?

我有一个UploadActiveModel类,它有一个属性:filename.由于只有一个属性,因此在表单中将该字段留空会导致在我的控制器中使用以下代码时出现错误:

class UploadsController < ApplicationController
  def create
    @upload = Upload.new(upload_params)
    # ...
  end

  private

  def upload_params
    params.require(:upload).permit(:filename)
  end
end
Run Code Online (Sandbox Code Playgroud)

我提出的最好的解决方法是rescueupload_params方法中,例如:

def upload_params
  params.require(:upload).permit(:filename) rescue ActionController::Parameters.new
end
Run Code Online (Sandbox Code Playgroud)

或者,我想我可以添加一个隐藏字段,以确保该filename字段始终设置为某种东西,无论如何,例如:

= simple_form_for upload do |f|
  = f.input :filename, as: :hidden, input_html: { value: '' }
  = f.input :filename, as: :file
  = f.submit 'Upload'
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理用户没有填写任何表单属性?

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

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

Rails 5 params,对象具有空数组,因为值被删除

我发送一个看起来像这样的控制器参数时遇到问题:

{ id: "1", stuff: {"A" => [], "B" => [], "C" => [], "D" => []} }
Run Code Online (Sandbox Code Playgroud)

该方法只能看到{ id: "1" }stuff删除整个参数.

如果数组中有任何值,则可以更改此值.但是说除了键之外,所有数组中都有值,"C"除了"C"像之外它们都会在那里:

{ id: "1", stuff: {"A" => ["1"], "B" => ["2", "3"], "D" => ["4"]} }
Run Code Online (Sandbox Code Playgroud)

我正在从Rails 4.2.x升级到这个问题 - > 5.0.0任何关于这里发生了什么的建议?我已经看到了一些文章/问题围绕改写(munging)参数,但我不知道如果是这样的问题,因为在如何改写(munging)作品的示例表{person: []}变成{person: nil},那里的人参数是不能完全丢弃.

arrays ruby-on-rails strong-parameters ruby-on-rails-5

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

狂欢2.1强大的参数

是否有一种简单的方法可以在Spree中向控制器添加新的允许参数而不更改默认值?

我正在尝试更改OrdersController中的orders_params方法.

ruby-on-rails spree strong-parameters

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

Rails 4要求和允许多个

很长一段时间的Java开发人员 - ror的新手 - 我在Rails 4中构建了一个JSON REST API,我遇到了使用强参数的问题.当我对我的一个端点执行HTTP POST请求时,我希望我的控制器需要主对象,需要它的一些属性,如果存在某些其他属性,它也会返回它们.看到那些需要和允许方法返回哈希,我想知道什么是允许和要求同一对象的某些属性的最佳实践.我应该合并两个哈希吗?非常感谢您的投入,因为我花了很多时间研究这个问题.

ruby rest ruby-on-rails strong-parameters json-api

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