我很难理解如何允许非模型参数。
我读了:
因此,对于“正常”情况 - 假设我有一个Foo只有一个属性的模型bar:
# foo.rb
class Foo < ActiveRecord::Base
# bar, which is a integer
end
# views/foos/new.html.erb
<%= form_for @foo do |f| %>
<%= f.number_field :bar %>
<%= f.submit %>
<% end %>
#foos_controller.rb
def create
@foo = Foo.new(foo_params)
# ...
end
#...
private
def foo_params
params.require(:foo).permit(:bar)
end
Run Code Online (Sandbox Code Playgroud)
因此,当我提交表格时,Foo就会创建遗嘱。
但是,如果bar属性背后有一些组合了一些非模型参数的逻辑怎么办?假设这bar是两个参数 ( ) 的总和bar = bar_1 + bar_2。然后视图和控制器看起来像:
# views/foos/new.html.erb …Run Code Online (Sandbox Code Playgroud) Rails 3.1(RC4)和作用域质量分配如何在加载数据列表时使用seeds.rb.
例如.我通常有类似的东西:
City.create([
{ :name => 'Chicago' },
{ :name => 'Copenhagen' },
...
])
Run Code Online (Sandbox Code Playgroud)
这创造了超过100个城市.由于City模型具有范围的质量分配,因此不再起作用:as => :admin.
据我所知,该.create()方法不允许我们投入:as => :admin.只有.new()和.update_attributes()使我们能够做到这一点:as => :admin.
所以做(像下面这样的)很麻烦(特别是对于100多条记录):
city1 = City.new({ :name => 'Chicago' }, :as => :admin)
city1.save
city2 = City.new({ :name => 'Copenhagen' }, :as => :admin)
city2.save
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
mass-assignment ruby-on-rails-3 ruby-on-rails-3.1 scoped-mass-assignment
我正在关注Railstutorial.org并在使用Rspec时收到MassAssignment Error.
10) User when email format is invalid should be invalid
Failure/Error: @user = User.new(name:"Example", email:"example@gmail.com",
ActiveModel::MassAssignmentSecurity::Error:
Can't mass-assign protected attributes: password, password_confirmation
Run Code Online (Sandbox Code Playgroud)
可能是因为我尝试在RSpec中的变量之前分配:
...
before do
@user = User.new(name:"Example", email:"example@gmail.com",
password: "foobar", password_confirmation: "foobar" )
end
subject { @user }
...
Run Code Online (Sandbox Code Playgroud)
是否可以在开发或测试模式下禁用MassAssignment保护?或者当RSpec运行时?任何帮助都会很棒!谢谢
我正在研究系统的CRUD部分。用户可以更新关键字。我想做的事情类似于INSERT IGNOREMySQL语句。
我处于foreach循环中,尝试更新关键字,但是我得到了一个
批量分配异常
错误
我当前的代码如下,我在做特别特别的事情吗?
// Save The Keywords...
$kwords = Input::get('keywords');
foreach($kwords as $key => $value)
{
// Save The Keywords...
Keywords::updateOrCreate( array('pack_id'=> $pack->pack_id, 'keyword_title' => $value));
}
Run Code Online (Sandbox Code Playgroud)
干杯
假设函数r返回五个值的元组.
scala> def r = (1,2,3,4,5)
r: (Int, Int, Int, Int, Int)
Run Code Online (Sandbox Code Playgroud)
当我从中分配返回的值时r,我得到了大写字母变量的错误.
scala> val (a,b,c,d,E) = r
<console>:13: error: not found: value E
val (a,b,c,d,E) = r
^
Run Code Online (Sandbox Code Playgroud)
如果我不使用大写字母,则不会发生错误.
scala> val (a,b,c,d,e) = r
a: Int = 1
b: Int = 2
c: Int = 3
d: Int = 4
e: Int = 5
Run Code Online (Sandbox Code Playgroud)
但是,我可以用单个assignemnt分配大写字母变量.
scala> val Q = 10
Q: Int = 10
Run Code Online (Sandbox Code Playgroud)
这是Scala的错误或功能吗?
我有一个关于attr_accessible在Rails中使用的问题.
我有时想设置guard_protected_attributes到false以绕过质量分配的保护.我想知道为什么以下行不起作用(它创建"无法字符串化键"错误):
@user.attributes=({ :name => "James Bond", :admin => true }, false)
Run Code Online (Sandbox Code Playgroud)
......但是这样做:
@user.send(:attributes=, { :name => "James Bond", :admin => true }, false)
Run Code Online (Sandbox Code Playgroud)
谁知道原因?
我花了很多时间试图解决模型中的虚拟属性问题.原来我只是忘了把它添加到模型中的attr_accesible.当然,我应该早点或更好地抓住它,首先应该通过将其添加到attr_accessible来开始整个过程.
为了防止这种情况再次发生,是否有一个配置设置我可以标记为在开发时抛出异常,如果我尝试批量分配并在受保护/不可访问时验证它?我知道我可以使用set config.active_record.whitelist_attributes = true来要求所有人使用白名单,但我的问题更多的是基于个别属性.
例如,如果我有一个带有attr_accessible的模型,则上面的行不会发出警告:name然后添加:nickname(virtual或not),并尝试批量指定它检查presence => true.我希望它警告我,我试图通过质量分配来验证受保护的属性.
正如标题所说,我需要将产品批量分配到一个类别,而从管理员我只能一次编辑一个产品; 我不知道为什么它不能从类别页面的"类别产品"选项卡中大量添加它们.
这就是为什么我需要另一种快速的方法,比如使用phpMyAdmin或类似的东西.
有帮助吗?
提前致谢!
这是我嵌套表单的相关部分:
<div class="field">
<%= f.fields_for "@partcode" do |p|%>
<%= p.label "partcode"%><br />
<%= p.text_field :partcode %>
<% end %>
</div>
Run Code Online (Sandbox Code Playgroud)
我已经在我的模型中有这个:
attr_accessible :partcode,
:description
Run Code Online (Sandbox Code Playgroud)
但当我在表单中输入内容时,我收到此错误:
Can't mass-assign protected attributes: @partcode
Run Code Online (Sandbox Code Playgroud)
这是我的零件代码模型:
class Partcode < ActiveRecord::Base
attr_accessible :partcode,
:description
validates :partcode,
:description,
:presence => true
belongs_to "goods_ins"
accepts_nested_attributes_for "goods_ins"
end
Run Code Online (Sandbox Code Playgroud)
这是我的商品在模型中的所有代码:
class GoodsIn < ActiveRecord::Base
attr_accessible :c4lpono,
:courier,
:deliverydate,
:deliverynoteno,
:description,
:destination,
:notes,
:partcode,
:quantity,
:signedby,
:suppliername
validates :deliverydate,
:deliverynoteno,
:destination,
:quantity,
:signedby,
:suppliername,
:presence => true
has_many :suppliers
has_many :partcodes …Run Code Online (Sandbox Code Playgroud) 我有一个带有Users表的Users表的应用程序:id|name|email|is_admin.我希望管理员能够将其他用户设置为管理员.
在models/User.php我防止大规模分配:
protected $fillable = ['name', 'email'];
Run Code Online (Sandbox Code Playgroud)
Laravel 4基于角色的质量分配得出结论,Laravel没有这样的功能.
我的问题是,什么是可行的解决方案?如何才允许管理员更新数据库中的"is_admin"列?
mass-assignment ×10
laravel ×2
laravel-4 ×2
php ×2
categories ×1
forms ×1
laravel-5 ×1
magento ×1
model ×1
nested-forms ×1
product ×1
roles ×1
rspec ×1
ruby ×1
scala ×1