2012-07-20 61 views
0

环境:导轨3.2.3与设计导轨:设计:用户

我想向注册表单添加注册码。注册码不在用户表中。有一个单独的registration_codes。它在注册表中的原因是,我想比较填写注册表单的用户输入的代码与注册代码表中的内容,并生成一个值,该值将进入用户表。

我收到一条错误消息:

undefined method `registration_code' for #<User:0x007f91b57b7890> 

,它的指向显示在视图/注册/ new.html.erb的registration_code文本框中

如何围绕获取代码事实上,registration_code不是用户表的一部分?表单工作正常,直到我将registration_code字段添加到表单。

回答

1

我将创建您的用户模型的方法来处理您的注册代码逻辑:

def registration_code=(code) 
    # Check registation_codes table and produce a value that will go into the users table 
end 

表单提交这一新的领域现在应该调用此方法与提交的值

+0

这不会阻止箱子方法执行吗? – EastsideDeveloper 2012-07-20 06:32:02

+0

它不应该。它的行为就像ActiveRecord根据数据库字段生成的默认设置器,除了这个是明确指定的。这种方法是首选,因为它将逻辑推送到您的模型中,因此更易于测试并保持控制器精简。 – Angelo 2012-07-20 06:43:15

1

我想你'使用表单构建器创建表单(一个form_for块)。在这种情况下,您可能使用像<%= f.text_field :registration_code %>这样的显示文本字段,但Rails在User模型上找不到registration_code,因为像您所说的那样,它不在那里。

请改为使用<%= text_field_tag :registration_code %>。你可以通过你的控制器访问这个通过params[:registration_code]

+0

是的,我正在使用表单生成器。你的建议应该有效。我试图使用这样的散列:form_fields_hash.each do | label,value | <%= f.label:label%><%= f.text_field:value%> end – EastsideDeveloper 2012-07-20 06:26:48