如何在不使用嵌套哈希的情况下从params中检索所有属性?

时间:2011-11-27 13:17:02

标签: ruby-on-rails ruby hash parameters attributes

我目前正在与我的一位朋友制作我的第一个iphone应用程序。当我在Rails中做后端时,他正在编写前端编码。现在的事情是,他试图通过发布请求向我发送必要的属性但不使用嵌套哈希,这意味着所有属性将直接放在params而不是“subhash”中。更具体地说,我想要做的是能够使用一些params方法检索所有这些属性。我知道params默认包含其他信息对我来说是不相关的,例如params [:controller]等。我已经将所有属性命名为与模型属性相同所以我认为应该可以轻松地传递它们,至少这在PHP中是可能的,所以我希望Rails有一个简单的方法来做到这一点。

所以例如在控制器中不使用User.new(params [:user]),我的用户属性不在嵌套的hash params [:user]中,而是直接在params中,所以如何才能获得所有这些属性立刻?并将它们放在User.new()?

3 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。我错过了将attr_accessible添加到我的模型中,当我尝试运行代码时最初返回错误:User.new(params)已经通过post请求传递了多个属性。

解决方案非常简单,可能过于简单,但由于这是我在Rails中的第一个真正的应用程序,我觉得它可能对其他有类似问题的新手有帮助。

答案 1 :(得分:0)

如果您想将更有限版本的params传递给new,您应该可以执行以下操作:

params = { item1: 'value1', item2: 'value2', item3: 'value3' }
params.delete(:item2)
params # will now be {:item1=>"value1", :item3=>"value3"} 

另请参阅this了解使用说明,但您在评论中提到的除外。除外的例子是:

params.except(:ssn, :controller, :action, :middle_name)

答案 2 :(得分:0)

您可以使用attribute_names方法从新创建的对象中获取可用属性。所以在这个特例中:

u = User.create
u.attributes = params.reject { |key,value| !u.attribute_names.include?(key)
u.save