假设用户模型使用带有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,而不指定所有属性.
我错过了什么吗?这是一个错误吗?
干杯
所以我正在制作一个狂欢扩展,其中我有自己的属性,我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评估主文件定义之前运行代码)或者根本没有任何反应.我应该在哪里放置此代码以将我的属性添加到允许的属性列表中?
编辑:由于这对人们来说似乎不清楚,我已经尝试了我发布的链接中列出的所有内容.告诉我尝试其中的东西是非常令人愤怒的.别那样做.
我想用这样的东西:
def answer_params
params.require(:answer).permit!.without(:user_id)
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有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)
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
我正在尝试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
这个问题部分回答了我的问题.作者使用类似的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) 我有一个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)
我提出的最好的解决方法是rescue在upload_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)
有没有更好的方法来处理用户没有填写任何表单属性?
我发送一个看起来像这样的控制器参数时遇到问题:
{ 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},那里的人参数是不能完全丢弃.
是否有一种简单的方法可以在Spree中向控制器添加新的允许参数而不更改默认值?
我正在尝试更改OrdersController中的orders_params方法.
很长一段时间的Java开发人员 - ror的新手 - 我在Rails 4中构建了一个JSON REST API,我遇到了使用强参数的问题.当我对我的一个端点执行HTTP POST请求时,我希望我的控制器需要主对象,需要它的一些属性,如果存在某些其他属性,它也会返回它们.看到那些需要和允许方法返回哈希,我想知道什么是允许和要求同一对象的某些属性的最佳实践.我应该合并两个哈希吗?非常感谢您的投入,因为我花了很多时间研究这个问题.