在数据库中搜索他/她的名字后获取用户的ID

时间:2011-11-05 23:04:27

标签: ruby-on-rails activerecord

因此,当用户完成测验时,他/她会填写他/她的姓名和电子邮件。在提交时,我需要在用户数据库中创建用户,并将个人答案存储在相关的答案数据库中。很明显,对于contact_id字段,我需要为Contact输入id:name => PARAMS [:名字]。当我在语句末尾添加.id时,我得到“没有方法错误ID”。但是当我在视图中时,contact.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

更新:我通过使用x.contact_id = Contact.last.id来完成工作

最后因为我们刚刚创建了一个新用户.2ms之前,所以很可能是我们想要的用户。这是一个不好的方法吗?

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

  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”:“e”等。所以正则表达式只是给了我那些与人的电子邮件地址和名称。

这是我可怕的表单代码。我先做了这个,并且一直在学习。

    <%= 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 %>

我尝试使用Form for和accepts_nested_attributes更改此设置,但我无法传递错误。部分是因为控制器和视图是由我制作的,并且不遵循rails惯例。因此,当form_for构建表单时,它找不到contact_path等。

1 个答案:

答案 0 :(得分:2)

我认为你正试图解决一个问题,即rails有一个相当不错的解决方案。 您的模型中的 accepts_nested_attributes_for 以及视图中的 fields_for 应该能够让这相当容易......实际上是蛋糕:-P

Ryan Bates og railscasts有几集涉及这个主题。

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

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

链接m_x也给你一些解释。

他的榜样甚至与我认为你要做的事情相当接近。