标签: mass-assignment

使用质量赋值在rails 4中添加带有复选框的嵌套属性

错误:

param is missing or the value is empty: color
Run Code Online (Sandbox Code Playgroud)

我正在制作一个表单,我可以将嵌套属性添加到父记录,我想通过复选框添加它们.我有父模型"汽车"和儿童模型"颜色"......但我想从一些默认的"颜色"开始...所以我也有模型"Sample_Colors",它根据"Car_Models"改变.

我正在尝试使用复选框将多个"颜色"添加到关联的"汽车"...我不希望与"Sample_Colors"和"颜色"的HABTM关系,因为我需要"颜色"记录可编辑而不仅仅是一个连接表.我使用HABTM完成了这个,所以我真的不明白为什么我不能以类似的方式创建非连接表记录.

我遇到麻烦的地方是质量分配......它要么抛出上面的错误,要么找不到colors_id ......

来澄清我要做的事情:

复选框需要
1.创建一个新的"颜色"记录(@ color.new)与@car记录父项关联
2.将@ color.new记录
的"value_one"列设置为sample_color.value_one值3.设置@的"value_two"列color.new记录到sample_color.value_two值

4.创建的复选框数量= =迭代的@sample_colors.

car_model.rb

class CarModel
has_many :sample_colors, dependent: :destroy
has_many :cars, dependent: :destroy
Run Code Online (Sandbox Code Playgroud)

car.rb

class Car   
has_many :colors, dependent: :destroy
belongs_to :car_model
accepts_nested_attributes_for :colors, allow_destroy: true
Run Code Online (Sandbox Code Playgroud)

sample_color.rb

class SampleColor
belongs_to :car_model
Run Code Online (Sandbox Code Playgroud)

color.rb

class Color
belongs_to :car
accepts_nested_attributes_for :finishes, allow_destroy: true
Run Code Online (Sandbox Code Playgroud)

_form(用于添加颜色)

    <%= form_for @car do |f| %>

    <%= f.fields_for 'car[color_attributes][]', @color, index: nil do |f| %>

<label class="form-label dk-aqua">Colors …
Run Code Online (Sandbox Code Playgroud)

checkbox ruby-on-rails nested-forms mass-assignment

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

使用Rails 3.1:as =>:admin更新受attr_accessible保护的属性

在阅读了Rails 3.1 API中的attr_accessible后,我发现其中有一个as :admin选项.我想知道两件事.

  1. 如果用户有一个admin标志,我的控制器如何告诉我的模型用户是管理员.

  2. 如果用户是所有者,我可以:as => owner在我的模型中指定,并且我的控制器如何通知我的模型他们是项目的所有者.

ruby-on-rails mass-assignment attr-accessible ruby-on-rails-3.1

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

具有多个输出的VB函数 - 分配结果

我知道没有简单的方法来进行多项功能分配VB,但是我的解决方案是 - 它是好的,你会怎样做得更好?

我需要什么(我将如何在python中做,只是一个例子)

def foo(a)    ' function with multiple output
    return int(a), int(a)+1

FloorOfA, CeilOfA = foo(a) 'now the assignment of results
Run Code Online (Sandbox Code Playgroud)

我是怎么用VB做的:

Public Function foo(ByVal nA As Integer) As Integer() ' function with multiple output
    Return {CInt(nA),CInt(nA)+1}
End Function

Dim Output As Integer() = foo(nA) 'now the assignment of results
Dim FloorOfA As Integer = Output(0)
Dim CeilOfA As Integer = Output(1)
Run Code Online (Sandbox Code Playgroud)

vb.net function variable-assignment mass-assignment

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

Rails 3.2,质量分配,动态角色?

我有一个Rails应用程序,其中包含一个包含admin属性的用户模型.它已被锁定使用attr_accessible.我的模型看起来像这样:

attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin
Run Code Online (Sandbox Code Playgroud)

以下是我的用户控制器中的更新方法:

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
    flash[:notice] = "Profile updated"
    redirect_to edit_user_url(@user)
  else
    render 'edit'
  end
end
Run Code Online (Sandbox Code Playgroud)

我的应用程序控制器中有一个帮助方法,它将角色作为字符串传回:

def current_user_role
  @current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role
Run Code Online (Sandbox Code Playgroud)

我也开始config.active_record.whitelist_attributes = trueconfig/application.rb.

我已经验证该current_user_role方法是根据当前用户的管理状态返回正确的值.Rails没有抛出质量分配错误.但是当我以管理员身份登录时尝试更新用户的管理状态时,Rails会执行更新并默默忽略该admin属性.在Rails控制台中拉出用户的记录表明该记录尚未被修改.

我觉得有一个特定于Ruby或Rails的问题,我不知道.我无法找到有关使角色动态化的任何信息.我能找到的最好的就是这个.

ruby ruby-on-rails mass-assignment attr-accessible

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

保存修改后的数据时,CakePHP会自动处理质量分配漏洞吗?

编辑:

从DCoder收到更多信息后,我在这里搜索的短语是一个"质量分配漏洞".也就是说,利用将所有有效字段保存到数据库的方法的便利性,无论它们是否存在于初始表单上(使它们容易受到包含比预期更多[可能更关键]字段的操作POST数据的影响).

然后将这两个常见的响应恰当地命名为白名单和黑名单; 用于修改的白名单字段,或将不应修改的字段列入黑名单.

我的问题如下:CakePHP是否会自动将提交表单中的字段列入白名单,或者我(以及其他Cake粉丝)是否需要小心我们是否正确列入白名单或列入黑名单?


原始问题:

Cake提供了很多很好的方法来生成表单并几乎自动处理它们.当我考虑安全性时,我想知道:Cake是否知道提交的表单中存在哪些字段,或者它是否只接受任何有效字段?看看下面的塞纳里奥如果我没了感觉(有人欢迎编辑我的问题得到更好的措辞,如果他们能想出更好的方式来表达的话):

假设我允许我的用户编辑他们的个人资料.我创建了一个表单,其中包含用户名,电子邮件和密码的字段edit.

一个聪明的用户想进来,他们改变is_admin字段从falsetrue,所以他们使用的应用程序像萤火虫自定义后的数据提交给edit行动,其中包括场is_admin设置为true.

现在的问题是,将蛋糕放在它自己是意识到is_admin是不是在原来的形式,还是需要小心明确指定哪些字段规定动作可以修改唯一字段?有没有更简单的方法?

谢谢!

詹姆士

security cakephp mass-assignment cakephp-2.0

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

无法使用Devise批量分配受保护的属性以创建has_many嵌套模型

我已经看过RailsCast,另一个嵌套属性视频,很多SO帖子,并与此争吵了一段时间,但我仍然无法弄明白.我希望它有点小.

我有两个型号,User(通过制定创建),和Locker(又名,产品心愿),和我试图创建Locker一个User用户注册时.我的登录表单有一个字段,用于表示新的Locker(适当调用的:name)我正在尝试分配给在新用户注册时创建的锁定器.我所遇到的只有:

WARNING: Can't mass-assign protected attributes: locker

我试过的每个组合accepts_nested_attributesattr_accesible在我的两个车型,但仍然没有什么作品.我可以从日志中看到它正在由Devise #create方法处理,我知道Devise不够聪明,无法创建我想要的模型:)

这是我的两个模型的相关部分:

# user.rb    
class User < ActiveRecord::Base
  attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :locker_attributes

  # Associations
  has_many :lockers
  has_many :lockups, :through => :lockers

  # Model nesting access
  accepts_nested_attributes_for :lockers
end
Run Code Online (Sandbox Code Playgroud)

# locker.rb
class Locker < ActiveRecord::Base
  belongs_to :user
  has_many :lockups
  has_many :products, :through => :lockups 

  attr_accessible :name, :description
end

# lockers_controller.rb (create)
    @locker …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mass-assignment nested-attributes devise ruby-on-rails-3

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

在Rails中使用accepts_nested_attributes_for +质量分配保护

假设你有这个结构:

class House < ActiveRecord::Base
  has_many :rooms
  accepts_nested_attributes_for :rooms
  attr_accessible :rooms_attributes
end

class Room < ActiveRecord::Base 
  has_one :tv
  accepts_nested_attributes_for :tv
  attr_accessible :tv_attributes
end

class Tv 
  belongs_to :user
  attr_accessible :manufacturer
  validates_presence_of :user
end
Run Code Online (Sandbox Code Playgroud)

请注意,Tv的用户无法故意访问.所以你有一个三层嵌套的表格,允许你在一个页面上输入房子,房间和电视.

这是控制器的创建方法:

def create
  @house = House.new(params[:house])

  if @house.save
    # ... standard stuff
  else
    # ... standard stuff
  end
end
Run Code Online (Sandbox Code Playgroud)

问题:你将如何填充user_id每个电视(它应该来自current_user.id)?什么是好的做法?

这是我在这看到的catch22.

  1. user_ids直接填充params哈希(它们非常嵌套)
    • 保存将失败,因为user_ids不可批量分配
  2. 在#save完成后为每个电视填充用户
    • 保存将失败,因为user_id必须存在
    • 即使我们绕过上述情况,电视也会暂时没有ids - 很糟糕

有任何体面的方式吗?

ruby ruby-on-rails nested-forms mass-assignment

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

这是如何阻止质量分配的?

我想开始在模型中使用attr_accessible来解决质量分配问题.我理解它是如何工作的,并尽可能多地进行研究.

我不明白的是使用update_attributes(params [:my_form])或create(params [:my_form])和逐个设置字段之间的区别?这两个都不是那么脆弱吗?

没有attr_accessible和这样做有什么区别...

@model_object = ModelObject.new
@model_object.create(params[:model_object_params])
Run Code Online (Sandbox Code Playgroud)

并且有attr_accessible并且这样做......

@model_object = ModelObject.new
@model_object.field1 = params[:model_object_params][:field1]
@model_object.field2 = params[:model_object_params][:field2]
@model_object.field3 = params[:model_object_params][:field3]
@model_object.save!
Run Code Online (Sandbox Code Playgroud)

这些创建记录的方法都不是那么脆弱吗?黑客/黑客可以发送这两种方法的网址,两者都会做同样的,对吧?

或者使用attr_accessible并逐个更新字段做不同的事情或以某种方式变得更安全?

我发现使用attr_accessible的所有这些方法对我来说没有任何意义.它似乎以两种不同的方式做同样的事情.我错过了什么?

谢谢.

ruby-on-rails mass-assignment

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

ActiveAdmin:无法批量分配受保护的属性:email,password,password_confirmation

我正在使用带有Activeise身份验证的ActiveAdmin的Rails.我有AdminUser和User模型,因此User模型不必关心admin.但是,我无法在Admin页面中创建/编辑Adminuser或User FROM INSIDE.每次我尝试这样做,它都会给我留言

Can't mass-assign protected attributes: email, password, password_confirmation
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为在User模型和AdminUser模型中,我已经拥有:

attr_accessible :email, :password, :password_confirmation
Run Code Online (Sandbox Code Playgroud)

为了尝试其他方式,我去了rails控制台并尝试创建一个AdminUser,这一切都有效:

AdminUser.create(:email => 'asdf@admin2.com', 
    :password => 'password', :password_confirmation => 'password')
Run Code Online (Sandbox Code Playgroud)

这意味着只有管理员网页的创建失败.

我正在使用Devise进行身份验证.User和AdminUser模型都会发生错误.

对于password和password_confirmation,我在数据库中没有这些字段,但这是Devise默认的方式,它在数据库中从不拥有密码.

这是用户模型:

devise :database_authenticatable, :registerable, :rememberable, :recoverable, :trackable, :omniauthable, :omniauth_providers => [:facebook]
         ##, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid

  # attr_accessible :title, :body
    validates :email, :password, :first_name, :last_name,
              presence: true
    validates :email, uniqueness: true

  has_many :devices
  has_many :posts
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mass-assignment devise activeadmin

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

如何使用接口获取对象的子集?

假设我有这个类和接口

class User {
    name: string;
    age: number;
    isAdmin: boolean;
}

interface IUser {
    name: string;
    age: number;
}
Run Code Online (Sandbox Code Playgroud)

然后我从某个地方得到这个 json 对象

const data = {
    name: "John",
    age: 25,
    isAdmin: true
}
Run Code Online (Sandbox Code Playgroud)

我想子集data使用IUser和删除isAdmin属性这样

let user = subset<IUser>(data);
// user is now { name: "John", age: 25 }
// can safely insert user in the db
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在 TypeScript 中实现该功能?

function subset<T>(obj: object) {
    // keep all properties of obj that are in T
    // …
Run Code Online (Sandbox Code Playgroud)

oop interface mass-assignment typescript typescript2.0

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