标签: mass-assignment

RoR 允许非模型参数

我很难理解如何允许非模型参数。

我读了:

因此,对于“正常”情况 - 假设我有一个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)

model ruby-on-rails mass-assignment strong-parameters

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

如何使用作用域质量分配来种子Rails 3.1应用程序

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

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

RSpec给出了ActiveModel :: MassAssignmentSecurity :: Error

我正在关注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运行时?任何帮助都会很棒!谢谢

rspec mass-assignment ruby-on-rails-3 railstutorial.org

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

updateOrCreate-Laravel中的批量分配异常

我正在研究系统的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)

干杯

php mass-assignment laravel laravel-4 laravel-5

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

Scala bug或功能?带大写字母变量的多重赋值错误

假设函数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的错误或功能吗?

scala mass-assignment

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

Rails - attr_accessible和质量分配

我有一个关于attr_accessible在Rails中使用的问题.

我有时想设置guard_protected_attributesfalse以绕过质量分配的保护.我想知道为什么以下行不起作用(它创建"无法字符串化键"错误):

@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)

谁知道原因?

ruby ruby-on-rails mass-assignment

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

Rails 3配置attr_accessible/protected的设置

我花了很多时间试图解决模型中的虚拟属性问题.原来我只是忘了把它添加到模型中的attr_accesible.当然,我应该早点或更好地抓住它,首先应该通过将其添加到attr_accessible来开始整个过程​​.

为了防止这种情况再次发生,是否有一个配置设置我可以标记为在开发时抛出异常,如果我尝试批量分配并在受保护/不可访问时验证它?我知道我可以使用set config.active_record.whitelist_attributes = true来要求所有人使用白名单,但我的问题更多的是基于个别属性.

例如,如果我有一个带有attr_accessible的模型,则上面的行不会发出警告:name然后添加:nickname(virtual或not),并尝试批量指定它检查presence => true.我希望它警告我,我试图通过质量分配来验证受保护的属性.

ruby-on-rails mass-assignment virtual-attribute

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

Magento将产品分类为类别

正如标题所说,我需要将产品批量分配到一个类别,而从管理员我只能一次编辑一个产品; 我不知道为什么它不能从类别页面的"类别产品"选项卡中大量添加它们.
这就是为什么我需要另一种快速的方法,比如使用phpMyAdmin或类似的东西.

有帮助吗?

提前致谢!

product magento categories mass-assignment

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

嵌套表单,"无法批量分配受保护的属性"

这是我嵌套表单的相关部分:

<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)

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

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

管理员的Laravel Mass Assignment

我有一个带有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"列?

php roles mass-assignment laravel laravel-4

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