错误:
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) 在阅读了Rails 3.1 API中的attr_accessible后,我发现其中有一个as :admin选项.我想知道两件事.
如果用户有一个admin标志,我的控制器如何告诉我的模型用户是管理员.
如果用户是所有者,我可以:as => owner在我的模型中指定,并且我的控制器如何通知我的模型他们是项目的所有者.
ruby-on-rails mass-assignment attr-accessible ruby-on-rails-3.1
我知道没有简单的方法来进行多项功能分配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) 我有一个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 = true了config/application.rb.
我已经验证该current_user_role方法是根据当前用户的管理状态返回正确的值.Rails没有抛出质量分配错误.但是当我以管理员身份登录时尝试更新用户的管理状态时,Rails会执行更新并默默忽略该admin属性.在Rails控制台中拉出用户的记录表明该记录尚未被修改.
我觉得有一个特定于Ruby或Rails的问题,我不知道.我无法找到有关使角色动态化的任何信息.我能找到的最好的就是这个.
编辑:
从DCoder收到更多信息后,我在这里搜索的短语是一个"质量分配漏洞".也就是说,利用将所有有效字段保存到数据库的方法的便利性,无论它们是否存在于初始表单上(使它们容易受到包含比预期更多[可能更关键]字段的操作POST数据的影响).
然后将这两个常见的响应恰当地命名为白名单和黑名单; 用于修改的白名单字段,或将不应修改的字段列入黑名单.
我的问题如下:CakePHP是否会自动将提交表单中的字段列入白名单,或者我(以及其他Cake粉丝)是否需要小心我们是否正确列入白名单或列入黑名单?
Cake提供了很多很好的方法来生成表单并几乎自动处理它们.当我考虑安全性时,我想知道:Cake是否知道提交的表单中存在哪些字段,或者它是否只接受任何有效字段?看看下面的塞纳里奥如果我没了感觉(有人欢迎编辑我的问题得到更好的措辞,如果他们能想出更好的方式来表达的话):
假设我允许我的用户编辑他们的个人资料.我创建了一个表单,其中包含用户名,电子邮件和密码的字段edit.
一个聪明的用户想进来,他们改变is_admin字段从false到true,所以他们使用的应用程序像萤火虫自定义后的数据提交给edit行动,其中包括场is_admin设置为true.
现在的问题是,将蛋糕放在它自己是意识到is_admin是不是在原来的形式,还是需要小心明确指定哪些字段规定动作可以修改唯一字段?有没有更简单的方法?
谢谢!
詹姆士
我已经看过RailsCast,另一个嵌套属性视频,很多SO帖子,并与此争吵了一段时间,但我仍然无法弄明白.我希望它有点小.
我有两个型号,User(通过制定创建),和Locker(又名,产品心愿),和我试图创建Locker一个User用户注册时.我的登录表单有一个字段,用于表示新的Locker(适当调用的:name)我正在尝试分配给在新用户注册时创建的锁定器.我所遇到的只有:
WARNING: Can't mass-assign protected attributes: locker
我试过的每个组合accepts_nested_attributes和attr_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
假设你有这个结构:
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.
user_ids直接填充params哈希(它们非常嵌套)
user_ids不可批量分配user_id必须存在有任何体面的方式吗?
我想开始在模型中使用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的所有这些方法对我来说没有任何意义.它似乎以两种不同的方式做同样的事情.我错过了什么?
谢谢.
我正在使用带有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) 假设我有这个类和接口
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) mass-assignment ×10
devise ×2
nested-forms ×2
ruby ×2
activeadmin ×1
cakephp ×1
cakephp-2.0 ×1
checkbox ×1
function ×1
interface ×1
oop ×1
security ×1
typescript ×1
vb.net ×1