标签: strong-parameters

有没有办法重命名强参数键?

假设我在没有使用强参数的控制器中有代码

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

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

如何在接收ActiveModel :: ForbiddenAttributesError时找到该属性

使用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)

ruby-on-rails strong-parameters

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

强参数和json输入轨道4

我试图通过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

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

仅允许Rails强参数中的某些可能值

我有一个带有用户模型的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

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

Rails强烈的params,名字中带有"dot"

我需要在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?

谢谢.

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

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

Rails 4 - 使用scaffold的强参数 - params.fetch

我使用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命令吗?我不知道如何处理花括号.

如何使用这种新的表达方式完成强大的参数?

controller ruby-on-rails scaffolding strong-parameters

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

为什么我的参数哈希为零?

在我的 Rails 控制器中,在窥探会话中,我的params哈希值是nil. request.params具有预期的哈希值。

\n\n

如果我注释掉该params = \xe2\x80\xa6行,params则恢复正常。

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

可能是什么原因造成的?

\n

ruby-on-rails rails-console pry strong-parameters

6
推荐指数
2
解决办法
4168
查看次数

如何允许具有强参数的Rack :: Test :: UploadedFile?

我在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!它工作正常.

ruby-on-rails-3.2 strong-parameters

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

Rails 4下的Devise 3中的自定义用户字段

我正在使用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

5
推荐指数
2
解决办法
5521
查看次数

强大的参数允许使用数组

我有要尝试发布的数据,看起来像{ foo: [[:bar, 1], [:baz, 0]] }

如何允许使用强参数?我能得到的最接近的是

params.permit(foo: [[]]) 哪个返回 {"foo"=>[]}

ruby ruby-on-rails ruby-on-rails-3 strong-parameters

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