2012-12-06 45 views
0

in Rails Controller中的create方法默认接收具有不同值的HTTP请求。 默认情况下,新的记录被创造这样的:Rails从请求中获取单个值

@apo = Apo.new(params[:apo]) 

但我如何可以访问单个值从这个PARAMS哈希?

我想创造这样的事情:

@apo = Apo.new do |a| 
     a.name = $someVariable 
     a.value = $anotherVariable 
     a.quantity = -> here i want to have one value which is in params[:apo] 
     end 

你明白找什么i'm呢? 尝试了数百万种可能性,但它只是不起作用。

另外,是否有可能,在视图中创建第二个参数散列,它只保存这一个值?

P.S.我不想使用JavaScript来做到这一点...

非常感谢!

回答

2

params是特殊的,并且由Rails为每个HTTP请求设置。这是形式的哈希

{ :object => { :attrib1 => "value1", :attrib2 => "value2" ... }} 

所以,你可以参考与

params[:foo] 

和个人属性的整个对象(场),如

params[:foo][:bar] 

一个ActiveRecord的模型可以在一个被创建通过传递值的散列来调用,就像在第一个例子中一样。但是还有许多其他方法来创建实例。你可以

def make_apo(some_value, another_value) 
    apo = Apo.new 
    apo.name = some_value 
    apo.value = another_value 
end 

这样的方法将返回一个Apo实例。在你的情况下,如果你在params有一些值,把上面的内容改为接受params作为另一个参数,或者在你调用时传递特定值。

def make_apo(some_value, another_value, quantity, passed_params) 
    apo = Apo.new 
    apo.name = some_value 
    apo.value = another_value 
    apo.quantity = passed_params[:apo][:quantity] 
end 

但是,这是一个非常不寻常的事情。所以不要只是这样做 - 更多的是通过解释发生了什么,而不是建议你这样做。

+0

哦,那正是我正在寻找的答案......非常感谢你! – Tobi89