假设我在没有使用强参数的控制器中有代码
Model.create name: params[:name], alias_id: params[:foreign_id]
Run Code Online (Sandbox Code Playgroud)
我可以在这里使用强参数吗?
我不能做
Model.create params.require(:name, :foreign_id)
Run Code Online (Sandbox Code Playgroud)
因为foreign_id不是一个参数
我不能做
Model.create params.require(:name, :alias_id)
Run Code Online (Sandbox Code Playgroud)
因为alias_id不在模型上.
基本上,我想知道在使用强参数时是否可以使用参数键别名.
ruby-on-rails ruby-on-rails-3 strong-parameters ruby-on-rails-4
使用strong_params并获取ActiveModel::ForbiddenAttributesError异常时,如何找出禁止的属性?我刚刚切换,attr_accessible调试消息通常很好,但切换到强params.
我收到此错误:
ActiveModel::ForbiddenAttributesError in SnippetsController#create
Run Code Online (Sandbox Code Playgroud)
这是一个嵌套模型.
def snip_params
params.require(:snippet).permit(:content, :approved, :user_id, :book_id)
end
Run Code Online (Sandbox Code Playgroud)
在我用过的父母身上
has_nested_attributes :snippets
Run Code Online (Sandbox Code Playgroud)
创造
def create
@snippet = @book.snippets.create(snip_params)
@snippet.user = current_user
if @snippet.save
redirect_to @book
flash[:success] = "Snippet submitted and awaiting approval."
else
flash[:base] = "Someone else has submitted a snippet, please try again later"
redirect_to @book
end
end
Run Code Online (Sandbox Code Playgroud)
参数内容:
{"utf8"=>"?",
"authenticity_token"=>"bTRSwFRIhN3l3DkkWPtLzpoQHYD+CezmJQLw8Oz5+3g=",
"snippet"=>{"content"=>"<p>AAAAAAAAAAAAA</p>\r\n"},
"commit"=>"Create Snippet",
"book_id"=>"1"}
Run Code Online (Sandbox Code Playgroud) 我试图通过JSON String保存数据,其中我有嵌套的关联属性.我不想使用attr_accessible.我几乎得到了强参数的逻辑,但仍然有问题使它们工作.我正在获取JSON字符串并使用它来使用它来保存数据
data = request.body.read
@inputData = Person.new(JSON.parse(data))
@inputData.save!
if@inputData.valid?
render :status => 200, :json => "Data inserted successfully"
else
render :status => 404, :json => "Not Inserted "
end
Run Code Online (Sandbox Code Playgroud)
我已经定义了permit strong参数方法允许这样的嵌套属性
def referral_params
params.require(:person).permit(:id, user_attributes: [:id, :first_name, :last_name, :email], device_attributes: [:id, :os_type, :os_version], location_attributes: [:id, :latitude, :longitude], duration_attributes[:id, :start_time, :end_time]) end
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用此regerral_params方法以及JSON输入字符串....
json ruby-on-rails nested-attributes strong-parameters ruby-on-rails-4
我有一个带有用户模型的rails应用程序,它可以有多个角色.我使用像这样的位掩码实现了这个:
class User < ActiveRecord::Base
DEFAULT_ROLES = %w[developer entrepreneur]
ROLES = ['admin', 'entrepreneur', 'developer']
def has_role?(role)
roles.include?(role.to_s)
end
def is?(role)
has_role?(role)
end
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+)
end
def roles
ROLES.reject do |r|
((roles_mask.to_i || 0) & 2**ROLES.index(r)).zero?
end
end
end
Run Code Online (Sandbox Code Playgroud)
在应用的注册页面中,我希望用户选择他们是"企业家"还是"开发者".但是,我想确保他们无法为自己(或任何其他人)分配任何其他角色,除非他们已经是管理员.
我的第一个想法是在roles=方法中通过改变它看起来像这样做
def roles=(roles)
unless current_user.is?(:admin)
validates_inclusion_of roles, :in => DEFAULT_ROLES
end
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+)
end
Run Code Online (Sandbox Code Playgroud)
但是,正如我发现的那样,你无法current_user从模型内部进行访问(如果你考虑它我觉得有意义......)
我的下一次尝试是看看我是否可以使用强参数来做到这一点.
我期待它看起来像这样(我正在使用设计,覆盖RegistrationsController) …
validation ruby-on-rails strong-parameters ruby-on-rails-4.2
我需要在Rails 4中允许一个参数,它的名字中有一个点:
我的params哈希看起来如下:
{
"dictionary_objects.id" => [
"102", "110", "106"
]
}
Run Code Online (Sandbox Code Playgroud)
我可以得到参数值:
>> params['dictionary_objects.id']
=> [
[0] "102",
[1] "110",
[2] "106"
]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试允许它时,它返回一个空哈希:
>> params.permit('dictionary_objects.id')
Unpermitted parameters: dictionary_objects.id
=> {}
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能在它的名字上留下一个带点的params?
谢谢.
我使用scaffold命令在我的Rails 4应用程序中制作我的组件.
最近,设置强params的方法中使用的术语已经从params.require变为params.fetch,现在设置中有花括号.
private
# Never trust parameters from the scary internet, only allow the white list through.
def engagement_params
params.fetch(:engagement, {})
end
Run Code Online (Sandbox Code Playgroud)
我找不到任何解释变更或如何使用它的文档.
我还可以将params.fetch(:engagement).permit(:opinion)写入fetch命令吗?我不知道如何处理花括号.
如何使用这种新的表达方式完成强大的参数?
在我的 Rails 控制器中,在窥探会话中,我的params哈希值是nil. request.params具有预期的哈希值。
如果我注释掉该params = \xe2\x80\xa6行,params则恢复正常。
class UsersController < Clearance::UsersController\n skip_before_filter :verify_authenticity_token\n\n def update\n binding.pry\n params = params.require(:user).allow(:foo)\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n\n可能是什么原因造成的?
\n我在Rails 3.2中使用了strong_parameters gem.为了测试图像上传过程,我有一个带参数的传入请求:
{"photo"=>{"image"=>#<Rack::Test::UploadedFile:0x000000069ce1f8 @content_type="image/png", @original_filename="test.png", @tempfile=#<Tempfile:/tmp/test.png20130420-9529-1xuka4v-1>>, "status"=>"approved", "in_use"=>false}, "controller"=>"member/photos", "action"=>"create"}
Run Code Online (Sandbox Code Playgroud)
如何允许图像属性进行分配?我试过了;
params.require(:photo).permit(:image)
Run Code Online (Sandbox Code Playgroud)
但它不起作用并说Validation failed: Image can't be blank.
当我允许所有参数时params.require(:photo).permit!它工作正常.
我正在使用Devise 3的候选版本,以便我可以将它与Rails 4一起使用.在Rails 3.2中我曾经能够User通过简单地将该字段添加到registration/edit.html.erb 来为我的模型添加自定义字段和registration/new.html.erb文件(运行正确的迁移后).然后我只是将该字段添加到attr_accessible模型中的字段列表中.
但是,在Rails 4中,没有attr_accessible列表,我不能简单地在视图中添加字段.如何添加自定义用户字段?
ruby-on-rails attr-accessible devise strong-parameters ruby-on-rails-4
我有要尝试发布的数据,看起来像{ foo: [[:bar, 1], [:baz, 0]] }。
如何允许使用强参数?我能得到的最接近的是
params.permit(foo: [[]]) 哪个返回 {"foo"=>[]}