2011-11-05 22 views
0

因此,当用户完成测验时,他/她会填写他/她的姓名和电子邮件。在提交时,我需要在用户数据库中创建用户,并将个人答案存储在相关的应答数据库中。所以很显然,为contact_id字段,我需要输入联系人的ID where id:name => params [:name]。当我在声明的最后加上.id时,我得到“没有方法错误ID”。但是,当我在视图中时,contact.id可以正常工作。我相信这是一个小问题,但我需要帮助。由于在数据库中搜索他/她的姓名后获取用户的ID

def submit 
    t = Contact.new 
    t.name = params[:name] 
    t.email = params[:email] 
    t.save 
    params.each do |key, value| 
     x = Answer.new 
     x.month = 1 
     x.question = key.to_i 
     x.answer = value 
     x.contact_id = Contact.where(:name => params[:name]) 
     x.save 
    end 
    redirect_to('/') 
    end 

更新:我已经得到的东西通过,因为我们刚刚创建了一个新的用户.2ms前使用x.contact_id = Contact.last.id

最后的工作,所以它是最有可能的我们想要的用户。这是一个不好的方法吗?

更新:我尝试使用新的失败代码。

def submit 
t = Contact.new 
t.name = params[:name] 
t.email = params[:email] 
t.save 
params.each do |key, value| 
    # target groups using regular expressions 

    if (key.to_s[/[0-9]/]) 
    s = Contact.where({:name => params[:name]}) 
    x = Answer.new 
    x.month = 1 
    x.question = key.to_i 
    x.answer = value 
    x.contact_id = s.id 
    x.save 
    end 
end 
redirect_to('/') 

UDATE:现在这个控制器代码为我工作。

class MonthOneController < ApplicationController 
    def index 
    @contacts = Contact.all 
    end 
    def submit 
    t = Contact.new 
    t.name = params[:name] 
    t.email = params[:email] 
    params.each do |key, value| 
     # target groups using regular expressions  
     if (key.to_s[/[0-9]/]) 
     t.answers.build(:month => 1, :question => key.to_i, :answer => value) 
     end 
    end 
    t.save 
    redirect_to('/') 
    end 
end 

我需要为每个问题和答案创建一个行,并且通过params []传递了多个。他们也进来像这样的“1”:“假”,“2”:“电子”等。所以正则表达式只是给了我与那些人的电子邮件地址和名称。

这是我可怕的表格代码。我首先做到了这一点,并且一直在学习。

<%= form_tag("/MonthOne", :method => "get") do %> 
    <p> 
    <%= label_tag(:q, "Question") %><br /> 
    <%= radio_button_tag("1", :a) %>Customer Scenario Tool<br /> 
    <%= radio_button_tag("1", :b) %>Videos<br /> 
    <%= radio_button_tag("1", :c) %>Sales Preview<br /> 
    <%= radio_button_tag("1", :d) %>Sales Rep Mailer<br /> 
    <%= radio_button_tag("1", :e) %>Unsolicited Proposal<br /> 
    </p> 
    <p> 
    <%= label_tag(:q, "question 1") %><br /> 
    <%= radio_button_tag("2", :true) %>True<br /> 
    <%= radio_button_tag("2", :false) %>True<br /> 

    </p> 
    <p> 
    <%= label_tag(:q, "question 2:") %><br /> 
    <%= radio_button_tag("3", :a) %>answer 1<br /> 
    <%= radio_button_tag("3", :b) %>answer 2<br /> 
    <%= radio_button_tag("3", :c) %>answer 3<br /> 
    <%= radio_button_tag("3", :d) %>answer 4<br /> 
    <%= radio_button_tag("3", :e) %>answer 5<br /> 
    </p> 
    <p> 
    <%= label_tag(:q, "question 3") %><br /> 
    <%= radio_button_tag("4", :a) %>1,500<br /> 
    <%= radio_button_tag("4", :b) %>10,000<br /> 
    <%= radio_button_tag("4", :c) %>15,000<br /> 
    <%= radio_button_tag("4", :d) %>30,000<br /> 
    </p> 
    <p> 
    <%= label_tag(:q, "question 4") %><br /> 
    <%= radio_button_tag("5", :a) %>answer 1<br /> 
    <%= radio_button_tag("5", :b) %>answer 2<br /> 
    <%= radio_button_tag("5", :c) %>answer 3<br /> 
    <%= radio_button_tag("5", :d) %>answer 4<br /> 
    </p> 
    <p> 
    Name: <%= text_field_tag(:name) %><br /> 
    Email: <%= text_field_tag(:email) %> <br /> 
    </p> 
    <%= submit_tag("Submit") %> 
<% end %> 

我试图改变这种使用窗体和accept_nested_attributes但我无法通过错误。部分原因是控制器和视图是由我制作的,并且不遵循rails惯例。所以当form_for构建表单时,找不到contact_path等。

+0

使用'last'是坏的,因为如果你使用多线程或并发使用你的数据库,你不能确定插入的最后一个'Contact'是否是正确的。你的'Answer'模型'belongs_to:contact'?如果是这样,请按照[RoR关联指南](http://guides.rubyonrails.org/association_basics.html#has_many-association-reference)中的描述使用't.answers.build'。无论如何,只要问你是否需要更多细节 –

+0

好,甜。我的答案模型确实属于联系人。去弄清楚如何实现这一点。 – Lsdafjklsd

+0

圣牛!这是一些严重的魔法。它就像你说的那样工作,只是它在答案栏中插入'nil'。我必须考虑将正确的参数纳入其中。谢谢 – Lsdafjklsd

回答

2

我认为你正在试图解决一个问题,那就是rails有一个相当不错的解决方案。 accepts_nested_attributes_for模型中的,连同fields_for鉴于应该能够使这很容易...蛋糕实际上:-P

瑞恩·贝茨OG railscasts有几个事件涉及的主题。

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

链接m_x给你也有同样的一些解释。

他的例子甚至与我认为你正在尝试做的事情非常接近。

+0

优秀的建议,就是我会做的。 –

+0

是的。我一直在关注这件事的确切表演。我将发布我的表单和更新后的代码。我无法得到form_for为我工作,因为在这一开始我没有走“铁轨方式”。这是一个痛苦,因为我没有得到Ryan也涵盖的那种很好的验证。希望当我更新我的代码时,你可以帮我重构一下:) – Lsdafjklsd

+0

这也是我使用rails时最大的问题。有很多的方式来做事。慢慢地,我慢慢拾起它们。通常会导致超级快速重写的东西,这让我花了很长时间才弄清楚...... railscasts我认为它是一种很好的方式来发现它们。我只需要发现更多像这样的资源。 – Rasmus

相关问题