如何通过数组传递变量而不是db记录?

时间:2011-12-05 10:33:51

标签: arrays ruby-on-rails-3 forms

我正在构建一个数据生成器。首先我要实现的是PESEL(基于出生日期在波兰的个人ID)生成器 - 我希望以开始和结束出生日期间隔的形式输入临时数据 - 我不想将其存储在数据库中(或者我应该这样做吗?) 这是我的pesel控制器:

  def new
    @pesel = Array.new
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @pesel }
    end
  end

但是我有一个“未定义的方法`model_name'用于NilClass:Class”错误 - 无论如何这是一个很好的解决方案吗?我在某处读到使用临时变量并没有使用'The Ruby Way' - 如果我的解决方案有误,请建议正确的。 (例如通过cookies传递这些变量?哈希?帮助方法?)

这是堆栈跟踪(我认为):

Started GET "/pesel" for 127.0.0.1 at 2011-12-05 16:18:20 +0100
  Processing by PeselController#new as HTML
Rendered pesel/new.html.erb within layouts/application (1513.9ms)
Completed 500 Internal Server Error in 1793ms

ActionView::Template::Error (undefined method `model_name' for NilClass:Class):
    1: <%= simple_form_for @pesel do |f| %>
    2:   <%= f.input :date_of_birth, :as => :date, :start_year => Date.today.year - 90,
    3:                                 :end_year => Date.today.year - 12, :discard_day => true,
    4:                                 :order => [:month, :year] %>
  app/views/pesel/new.html.erb:1:in `_app_views_pesel_new_html_erb__708648673_90148530'
  app/controllers/pesel_controller.rb:7:in `new'

Rendered /home/ofca/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (5.6ms)
Rendered /home/ofca/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (4.0ms)
Rendered /home/ofca/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (17.6ms)

1 个答案:

答案 0 :(得分:1)

form_for假设您传递的对象存在某些属性,例如model_name

  1. 不要使用form_for @pesel,只需使用form_tag和相关的_tag方法。
  2. 使用Pesel模型。模型是 not 表,并且您的模型不必向数据库写入任何内容。只是不要从ActiveRecord继承,但确实提供了model_name以及form_for帮助者期望的任何其他字段。