标签: strong-parameters

RSpec - 测试强参数ActionController :: ParameterMissing

如何测试某个动作是否会引发ActionController::ParameterMissing异常?

例如:

it "raises an exception" do
  post :create, {}
  expect(response).to raise ActionController::ParameterMissing
end
Run Code Online (Sandbox Code Playgroud)

以上似乎不起作用,它将失败测试与ActionController::ParameterMissing异常.

rspec ruby-on-rails strong-parameters

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

Permit_params 不适用于自定义创建操作

我不明白为什么 Permit_params 不能与自定义创建操作一起使用。

例如,我们以基本的 AdminUser 资源为例。

默认情况下一切正常。我们有:

ActiveAdmin.register AdminUser do
  permit_params :email, :password, :password_confirmation

  form do |f|
    f.inputs "Admin Details" do
      f.input :email
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,一旦我们添加自定义创建,由于某些原因,permit_params 将不再起作用。

ActiveAdmin.register AdminUser do
  permit_params :email, :password, :password_confirmation

  form do |f|
    f.inputs "Admin Details" do
      f.input :email
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end

  controller do
    def create
      AdminUser.create(params[:admin_user])
      do_some_magic_stuff_here
      redirect_to backend_admin_users_path, notice: 'Custom create'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我在“AdminUser.create(params[:admin_user])”行中收到错误“ActiveModel::ForbiddenAttributesError”

尝试了很多可能的解决方案,只有一个对我有用,但我真的不喜欢这个:

def create
  AdminUser.create(params[:admin_user].permit(:email, :password, :password_confirmation))
  do_some_magic_stuff_here
  redirect_to admin_admin_users_path, …
Run Code Online (Sandbox Code Playgroud)

activeadmin strong-parameters ruby-on-rails-4

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

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

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

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
查看次数

Rails 强参数 - 无需密钥即可允许请求

我正在开发 Rails API,并在控制器中使用强参数。我的请求规范对于一种型号失败,但适用于所有其他型号。每个型号的控制器几乎都是相同的。

正如您在下面的规范中看到的,请求正文应该是{ "tag": { "name": "a good name" }}. 然而,这个规范使用的{ "name": "a good name" }应该是无效的,因为它缺少“标签”键。相同控制器功能的相同规格适用于许多其他型号。

另一个有趣的变化是,如果我更改控制器的强参数,params.require(:not_tag).permit(:name)它会因不包含“not_tag”键而引发错误。

  • 红宝石:2.6.5p114
  • 轨道:6.0.1
  • 预期响应状态:422
  • 收到响应状态:201

控制器

class TagsController < ApplicationController
  before_action :set_tag, only: [:show, :update, :destroy]

  # Other methods...

  # POST /tags
  def create
    @tag = Tag.new(tag_params)

    if @tag.save
      render "tags/show", status: :created
    else
      render json: @tag.errors, status: :unprocessable_entity
    end
  end

  # Other methods...

  private
    # Use callbacks to share common setup or constraints between actions.
    def …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails strong-parameters

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

Rails 4.0&Devise - 强参数错误

新手到这里的铁路,所以忍受我.

使用ruby 2.0的Rails 4上的新应用程序,我安装了Devise并按照说明(默认root等).在github上设计自述文件说它应该与rails4兼容但是

  • db:migrate失败,除非我在User.rb中注释掉了attr_accessible行
  • 在评论完之后,我在尝试创建用户时出现"Devise :: RegistrationsController #create中的ActiveModel :: ForbiddenAttributesError"错误.

我看到像这样的堆栈溢出问题,但很多答案直接进入了一些复杂的谈话.我得到我需要为质量分配指定允许的属性,但是如何?在哪里?哪些属性需要被允许,所有这些属性?只有我希望同时更改/创建的那些?

从错误判断我会创建一个从Devise :: registrationsController继承的registrations_controller.rb吗?我在那里指定了什么?

任何一步一步,新手友好的答案非常感谢.我已经用尽了自己尝试从这里的答案和谷歌搜索的各种网站的不同代码.

devise strong-parameters ruby-on-rails-4

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

Rails 4强参数未知密钥

我已经按照Railscast将应用程序迁移到Rails 4并转换为Strong Parameters.http://railscasts.com/episodes/415-upgrading-to-rails-4

我的创建/新方法工作正常.但是,当我尝试更新记录时,我遇到了问题.我一直收到以下消息:

CustomersController中的ArgumentError #update未知密钥:first_name

我在Stack Overflow上查看了各种帖子,还生成了一个新的Rails 4应用程序,以验证我是否正确地做事.我显然错过了一些东西.

这是更新方法的Controller代码:

def update
    @customer = Customer.find(customer_params)

    respond_to do |format|
      if @customer.update(customer_params)
        format.html { redirect_to @customer, notice: 'Customer was successfully updated.' }
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.json { render json: @customer.errors, status: :unprocessable_entity }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

这是我设置强大参数的地方:

private

def set_customer
      @customer = Customer.find(params[:id])
end

def customer_params
  params.require(:customer).permit(:first_name, :middle_initial, :last_name, :address1, :address2, :city, :state, :zip, :phone, :gender, :email, :membership_id, :date_of_birth)
end
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助.

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

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

Rails:将params hash传递给模型

我有一个用户到用户的消息系统.我正在尝试将一组用户ID传递给ConversationUser(连接表)模型,然后conversation_users从每个人创建多个user.id.这两个领域ConversationUserconversation_iduser_id.我能够初始化单个会话用户,因为新conversation_id的传递给模型,但由于某种原因,用户ID的哈希不会到达我的模型.我得到了一个Validation failed: User can't be blank

我的对话/捕获user_ids的新视图:

<%= check_box_tag "conversation_user[recipient][]", user.id %> <%= user.name %><br />
Run Code Online (Sandbox Code Playgroud)

我知道这是有效的,因为我收到的部分短信是:

"conversation_user"=>{"recipient"=>["9", "10"]}
Run Code Online (Sandbox Code Playgroud)

我的Rails 4控制器的基本要点和强大的参数:

class ConversationsController < ApplicationController
  def new
    @user = User.find(params[:user_id])
    @conversation = @user.conversation_users.build
    @conversation.build_conversation.messages.build
  end

  def create
    @conv = Conversation.create!
    @conversation = @conv.conversation_users.create!(conversation_user_params)
  end

  def conversation_user_params
    params.require(:conversation_user).permit(recipient: [])
  end
Run Code Online (Sandbox Code Playgroud)

我的ConversationUser模型的基本要点:

class ConversationUser < ActiveRecord::Base
  attr_accessor :recipient

  before_create :acquire_conversation

  validates :user_id, :conversation_id, presence: true 

  def acquire_conversation …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails actioncontroller strong-parameters

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

accepts_nested_attributes_for创建重复项

accepts_nested_attributes_for创建重复项

模型

class Article < ActiveRecord::Base
  has_many :article_collections
  accepts_nested_attributes_for :article_collections, :allow_destroy => true, reject_if: :all_blank
end

class ArticleCollection < ActiveRecord::Base
  belongs_to :article
end
Run Code Online (Sandbox Code Playgroud)

调节器

def update
  @article = Article.find_by_id(params[:id])
  @article.update_attributes(params[:article])
  redirect_to :index
end
Run Code Online (Sandbox Code Playgroud)

PARAMS

params = {"utf8"=>"?"
   "article"=>
   {
    "data_id"=>"dfe9e32c-3e7c-4b33-96b6-53b123d70e7a", "name"=>"Mass", "description"=>"mass",
    "status"=>"active", "volume"=>"dfg", "issue"=>"srf", "iscode"=>"sdg", 
        "image"=>{"title"=>"", "caption"=>"",  "root_image_id"=>""},
    "article_collections_attributes"=>
    [
    {"name"=>"abcd", "type"=>"Special", "description"=>"content ","ordering_type"=>""}
    ]
  },
"commit"=>"Save", "id"=>"b8c8ad67-9b98-4705-8b01-8c3f00e55919"}
Run Code Online (Sandbox Code Playgroud)

安慰

 Article.find("b8c8ad67-9b98-4705-8b01-8c3f00e55919").article_collections.count
 => 2
Run Code Online (Sandbox Code Playgroud)

问题是,每当我们更新文章时,它都会创建多个article_collections.

假设article_collections是2意思是如果我们正在更新文章它创建多个article_collections = 4,它没有更新相同的article_collections,它是新创建的article_collections.

为什么要创建重复项?

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

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

Rails 5 API强参数行为

前几天,我生成了一个新的rails 5 --api --database = postgresql应用程序,并且仅创建了一个脚手架(Hero)。我想知道强参数在rails中如何工作,因为我看到了一些奇怪的行为:

控制器看起来像:

def create
  hero = Hero.new(hero_params)

  if hero.save
   render json: hero, status: :created, location: hero
  else
   render json: hero.errors, status: :unprocessable_entity
  end
end
Run Code Online (Sandbox Code Playgroud)

我的hero_params看起来像这样:

def hero_params
  params.require(:hero).permit(:name)
end
Run Code Online (Sandbox Code Playgroud)

因此,我假设客户端需要提交包含"hero"键的哈希,并且允许它具有一个"name“”子键,当调用此控制器操作时,该子键可以被批量分配。

意思是,JSON应该如下所示:

{
  "hero": {
    "name": "test"
  }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是在这里我看到了奇怪的行为。当用户提交上述确切的JSON时,参数的输入方式为:

Parameters: {"hero"=>{"name"=>"test"}}
Run Code Online (Sandbox Code Playgroud)

现在,如果用户仅提交:

{ "name": "test" }
Run Code Online (Sandbox Code Playgroud)

它仍然会创建一个新资源,并且参数输入为:

Parameters: {"name"=>"test", "hero"=>{"name"=>"test"}}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么会有两套参数,一套带有实际提交的数据,一套以英雄对象的格式,好像它在预期批量分配一样?

  2. require(:hero)不提交该密钥时,为什么不引发错误?我认为答案是因为什么会自动创建第二个哈希值("hero"=>{"name"=>"test"}}来自问题1)。

我在这里缺少的任何信息将不胜感激,因为这是开箱即用的准系统行为。

ruby json ruby-on-rails strong-parameters ruby-on-rails-5

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

如何在Rails 5.1.4中添加我的参数?

我有以下代码用于在我的网站上对表格进行排序.它正在努力Rails 4.2,但升级到Rails 5.1.4它失败了.正如我在Rails 5的变化中所读到的那样.虽然我理解由于它的变化而破坏但我仍然不明白如何调整这种方法以使其再次工作,如果有人可以,我会非常感激告诉我并解释一下.谢谢!

def roster_sort_link(column, title = nil)
  title ||= column.titleize
  direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
  icon = sort_direction == "asc" ? "glyphicon glyphicon-chevron-up" : "glyphicon glyphicon-chevron-down"
  icon = column == sort_column ? icon : ""
  link_to "#{title} <span style='font-size: 10px;' class='#{icon}'></span>".html_safe, params.merge({column: column, direction: direction})
end
Run Code Online (Sandbox Code Playgroud)

该问题出现在该方法的最后一行,其中指出:

params.merge({column: column, direction: direction})

我得到的错误如下:

unable to convert unpermitted parameters to hash

ruby hash ruby-on-rails strong-parameters ruby-on-rails-5

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

为什么我在 Rails 5 的 Rails 控制台中遇到严重参数错误?

我想在我的控制台中调用它(ap是很棒的打印宝石):

ap Purchase.last(10)
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash
Run Code Online (Sandbox Code Playgroud)

它的工作原理如下:

irb(main):020:0> ap Purchase.last
#<Purchase:0x00007f86b792a320> {
                              :id => 28445,
                         :user_id => 10177,
                      :product_id => nil,
                    :product_type => nil,
                           :price => 9.0,
                    :gateway_code => nil,
                     :gateway_msg => nil,
                :gateway_response => nil,
                      :created_at => Fri, 18 May 2018 22:20:10 UTC +00:00,
                      :updated_at => Fri, 18 May 2018 22:20:10 UTC +00:00,
                  :checkout_total => 9.0,
                      :successful => true,
                         :cart_id => 17242,
                   :report_errors => nil,
    :transacted_value_of_products => 9.0,
            :comp_credits_applied => 0.0 …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails strong-parameters awesomeprint rails-activerecord

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