标签: strong-parameters

不能允许参数?

这对我来说很奇怪,所以我只是好奇是否有其他人遇到过这个问题:

我有以下内容:

def credential_params
  params.required(:credential).permit(:name,:agent_ids)
end
Run Code Online (Sandbox Code Playgroud)

在我的控制器中创建和更新动作我正在使用上述参数调用的质量赋值...

@credential.update_attributes(credential_params)
Run Code Online (Sandbox Code Playgroud)

但我还是得到了 Unpermitted parameters: agent_ids

如果我改变它params.required(:credential).permit!(即允许所有)当然它是有效的.

我觉得我必须在这里忽略一些明显的问题...任何人都知道它可能是什么?

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

4
推荐指数
2
解决办法
1937
查看次数

具有强对数的不允许参数,具有多对多关系

我有一个并且属于许多关系设置,如下所示:

has_and_belongs_to_many :players, :class_name => "User" # In app/models/team.rb
has_and_belongs_to_many :teams                          # In app/models/user.rb
Run Code Online (Sandbox Code Playgroud)

在创建用户之后,我正在使用表单来创建团队.这是我的团队控制器:

def create
  @team = Team.create(team_params)
end

private
def team_params
  params.require(:team).permit(:name,:captain,:season,:year,:active,:player_ids)
end
Run Code Online (Sandbox Code Playgroud)

除了玩家(用户)之外,一切都会保存.以下是控制台上的输出:

Started POST "/teams" for 127.0.0.1 at 2013-10-20 01:46:04 -0400
Processing by TeamsController#create as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"jhNUgdfSVNxBgpZkmvjSQg/7DGsV1ts+Y1a1xWQ6A1Y=", "team"=>{"name"=>"uuuuu", "captain"=>"18", "season"=>"Summer", "year"=>"2013", "player_ids"=>["", "18"]}, "button"=>""}
  User Load (1.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 18 ORDER BY "users"."id" ASC LIMIT 1
Unpermitted parameters: player_ids
   (0.2ms)  BEGIN
  SQL (3.4ms)  INSERT INTO "teams" ("captain", "created_at", …
Run Code Online (Sandbox Code Playgroud)

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

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

Rails强参数:如何同时接受模型和非模型属性?

我有一个使用所有常用属性创建用户模型的表单,但是我还传递了许多非模型属性,基于这些属性,我将在控制器操作中创建更多内容。

我的问题是如何告诉“强参数”接受用户数据以及与用户数据库无关的其他数据?

为了说明这一点,我的表单可能是这样的(为简洁起见删除了提交按钮):

<%= form_for @user do |f| %>
  <%= f.text_field 'attribute1' %>
  <%= f.text_field 'attribute2' %>
  <%= f.text_field 'attribute3' %>

  <%= text_field_tag 'attribute_not_on_user_model1' %>
  <%= text_field_tag 'attribute_not_on_user_model2' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

如何使用强参数来执行此操作?我尝试了这个:

params.require(:user).permit(:attribute1, :attribute2 , :attribute3, :attribute_not_on_user_model1, 
  attribute_not_on_user_model2)
Run Code Online (Sandbox Code Playgroud)

还有这个:

params.require(:user).permit(:attribute1, :attribute2 ,     
  :attribute3).require(:attribute_not_on_user_model1, 
  attribute_not_on_user_model2)
Run Code Online (Sandbox Code Playgroud)

两者都不起作用。我知道可以attr_accessor在用户中使用,但是这种形式的属性列表越来越多,这些属性本身与用户模型无关(但是对于创建用户模型及其后续相关模型而言必不可少) 。我们可能会争论这不是执行此操作的最佳方法(会想到一个表单对象),但目前我想看看Strong Parameters是否可以在这里帮助我。

ruby-on-rails strong-parameters

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

Rails 4多个嵌套表单和强参数

我使用rails 4和嵌套表单和强参数.

我需要从一个表单更新多个模型.

这就是我宣布强大参数的方式.从父控制器.该协会是的has_many和belongs_to的顺序去Rundatum->材料 - > ParticleSize

def rundatum_params
    params.require(:rundatum).permit( :material, :company_id, :material_density, :feed_moisture, :date, :building, :machine, :material_weight, :time_mins, :rate_lb_hr, :mill_amps, :class_amps, :mill_liner, :beater_plate_size, :mill_rpm, :class_rpm, :feeder_type, :feeder_setting, :feeder_aug_diameter, :tlgs_set, :air_pressure, :temp_mill_out, :temp_prod_out, :temp_ambient, 

    materials_attributes: [:id, :name, :density, :msds_url, :moisture, :notes, :_destroy], 

    particle_sizes_attributes: [:id, :screen, :percent_through, :percent_retained, :_destroy])
end
Run Code Online (Sandbox Code Playgroud)

rails服务器的输出是:

Rundatum Load (0.6ms)  SELECT  "rundata".* FROM "rundata"  WHERE "rundata"."id" = $1 LIMIT 1  [["id", 7]]

Unpermitted parameters: particle_sizes_attributes
Run Code Online (Sandbox Code Playgroud)

从一个表单更新多个模型时,声明强参数的方法是什么?

谢谢

nested-forms strong-parameters ruby-on-rails-4

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

嵌套 has_one 关联的强参数

我似乎遗漏了一些明显的东西,但我无法允许嵌套has_one关联的属性。

控制器:

def create
  @crossword = Crossword.new(crossword_params)

  if @crossword.save
    render :show, status: :created, location: [:api, @crossword]
  else
    render json: @crossword.errors, status: :unprocessable_entity 
  end
end

def crossword_params
  params.require(:crossword).permit(:title, :grid_size, grid_size_attributes: [:rows, :columns])
end
Run Code Online (Sandbox Code Playgroud)

模型:

validates :title, :grid_size, presence: true
validates_associated :grid_size
has_one :grid_size
accepts_nested_attributes_for :grid_size
Run Code Online (Sandbox Code Playgroud)

要求:

POST /api/crosswords.json HTTP/1.1
X-Accept: application/crosswords.v1
Content-Type: application/json
Host: localhost:3000
Connection: close
User-Agent: Paw/2.1 (Macintosh; OS X/10.10.0) GCDHTTPRequest
Content-Length: 83

{"crossword":{"title":"My Aweosme Crossword","grid_size":{"rows":15,"columns":15}}}
Run Code Online (Sandbox Code Playgroud)

Rails 控制台输出:

Started POST "/api/crosswords.json" for 127.0.0.1 at 2014-12-19 11:05:13 -0500 …
Run Code Online (Sandbox Code Playgroud)

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

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

如何使用Rails Action Controller嵌套参数来允许特定属性哈希

关于嵌套参数有很多问题,但我似乎无法找到解决我特定的简单情况的问题.

我正在尝试允许不是数组的嵌套哈希.我希望这可行:

params.require(:book).permit(:title, :description, style: {:font, :color})
Run Code Online (Sandbox Code Playgroud)

但它导致语法错误.

然而,这有效:

params.require(:book).permit(:title, :description, style: [:font, :color])
Run Code Online (Sandbox Code Playgroud)

但我的问题是,它似乎允许style值为具有属性的项目数组:font和:color.我只想允许具有这两个属性的单个哈希.

我尝试了其他变体,但我不断收到语法错误.我很感激任何帮助.

上下文:Rails 4.1.7,Ruby 2.0.0(它在我的todo列表中进行升级!),而不是使用ActiveRecord.

hash ruby-on-rails actioncontroller strong-parameters

4
推荐指数
2
解决办法
6659
查看次数

在Devise用户模型中编辑自定义字段

这些字段是通过迁移添加的,并且创建了视图的表单,但控制器会在从视图到模型的路径上过滤参数.无论我做什么,我的参数总是不允许的.我的控制器代码

#应用程序/控制器/用户/ registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
  before_filter :configure_sign_up_params, only: [:create]
  before_filter :configure_account_update_params, only: [:update]

  protected

  # If you have extra params to permit, append them to the sanitizer.
  def configure_sign_up_params
   devise_parameter_sanitizer.for(:sign_up)<<[:first_name,:last_name,:profile_image,:graduation_year]
  end

  # If you have extra params to permit, append them to the sanitizer.
  def configure_account_update_params
   devise_parameter_sanitizer.for(:account_update)<<[:first_name,:last_name,:profile_image,:graduation_year]
  end

end
end
Run Code Online (Sandbox Code Playgroud)

#配置/ routes.rb中

Rails.application.routes.draw do
#...

  devise_for :users, controllers: { account_update: "users/registrations", sign_up:"users/registrations" }
end
Run Code Online (Sandbox Code Playgroud)

#错误

Parameters: {"utf8"=>"?", "authenticity_token"=>"Qts15L3n6Xvsn0hwNvIUI6UrWUQyV/qEyoQAZ8M+udMK1RBTQS1XoNWgpg1JrXqWpb9NbrsaHtQVVU8XMwoSIQ==", 
 "user"=>{"first_name"=>"a", "last_name"=>"a", 
 "profile_image"=>#<ActionDispatch::Http::UploadedFile:0x00000004fe0bb0 @tempfile=#<Tempfile:/tmp/RackMultipart20150709-4420-12guerh.jpeg>, @original_filename="test1.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[profile_image]\"; filename=\"test1.jpeg\"\r\nContent-Type: …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise web strong-parameters ruby-on-rails-4

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

UsersController中的NameError - (未初始化的常量SCrypt)

在使用Rails 4.1.0Ruby 2.1.0的 Rails应用程序中,

我一直在使用Authlogic对用户进行身份验证.

users_controller.rb,我有一个创建方法,如下所示.

def create
  @user = User.new(user_params) #this line has the error
  respond_to do |format|
    if @user.save
      format.html { redirect_to_target_or_default account_url, notice: 'User was successfully created.' }
    else
      format.html { render action: 'new' }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

由于强烈建议在Rails 4.0中使用强参数,attr_accessible因此从User模型和下面的代码中删除了添加到users_controller.rb的给定代码.

private

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:login, :email, :password, :password_confirmation, :role_ids)
    end
Run Code Online (Sandbox Code Playgroud)

User.rb …

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

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

Rails 4错误"param缺失或值为空:"在创建中

我查看了几个教程,ruby指南和几个stackoverflow问题.我首先尝试使用simple_form,现在是老式的方式,无法弄清楚为什么params没有通过.

控制器:

def new
  @topgem = Topgem.new
end

def create 
  @topgem = Topgem.new(topgem_params)

  if @topgem.save
    redirect_to @topgem
  else
    render 'new'
  end
Run Code Online (Sandbox Code Playgroud)

...

 private
    def topgem_params
      params.require(:name).permit(:url, :description, :downloads, :last_updated)
    end
Run Code Online (Sandbox Code Playgroud)

模型:

class Topgem < ActiveRecord::Base

  has_many :votes
  has_many :users, through: :votes

  validates :name, presence: true, uniqueness: true, :length => {
    :minimum =>2,
    :maximum =>50}

  validates :url, presence: true
  validates :description, presence: true 
  validates :downloads, numericality: { only_integer: true }
end
Run Code Online (Sandbox Code Playgroud)

new.html.erb

<%= form_for(@topgem) do |f| %>


  <%= f.label :name %>: …
Run Code Online (Sandbox Code Playgroud)

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

3
推荐指数
1
解决办法
2万
查看次数

通过复选框Rails 4添加多个嵌套属性(可能有多个表单)

3/13更新:
我用我的模型,控制器逻辑和几个表单版本做了一个小样本项目.



我正在构建一个表单,用户可以在其中添加"任务"和"里程碑".(即.任务='真空'在里程碑里面''干净的房子').它基本上是一个任务/子任务类型模型,父级为"里程碑",子级为"任务".

任务和里程碑都属于"项目"....所以我试图通过嵌套表单添加任务和里程碑以及更新操作.我想要的方法是为每个@task_template实例创建一个表单并一次更新多个表单.

我的问题是我也试图通过名为"MilestoneTemplates"和"TaskTemplates"的表动态设置"启动里程碑/任务"....

用户提取"添加里程碑/任务"页面,并根据其类型项目,他们在复选框旁边看到一系列预建任务(@task_templates)和里程碑(@milestone_templates).然后,用户检查他们要添加的任务或里程碑旁边的复选框.这应该为用户创建一个具有预建@ task_template.name,@ task_template.description ...等的特定任务

我甚至无法创建1.我正在使用Rails 4,我认为我已经正确设置了我的strong_params.以下是我对此的看法:

楷模:

class Task < ActiveRecord::Base
    belongs_to :user
    belongs_to :project
  belongs_to :milestone

class Milestone < ActiveRecord::Base
 belongs_to :project
 belongs_to :user
 has_many :tasks, dependent: :destroy, inverse_of: :milestone
 accepts_nested_attributes_for :tasks, allow_destroy: true

class Project < ActiveRecord::Base
 has_many :milestones, dependent: :destroy
 has_many :tasks, dependent: :destroy
 accepts_nested_attributes_for :tasks, allow_destroy: true
 accepts_nested_attributes_for :milestones, allow_destroy: true

 #the "Starter Milestones & Tasks"

class MilestoneTemplate < ActiveRecord::Base
    has_many :task_templates, dependent: :destroy, inverse_of: :milestone_template

class TaskTemplate < ActiveRecord::Base
     belongs_to …
Run Code Online (Sandbox Code Playgroud)

forms checkbox ruby-on-rails nested-attributes strong-parameters

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