0

データベースからランダムなオブジェクトをレンダリングしようとしています。手順: 1. generate button(メイン ページ) -> 2. 呼び出しrand_task(コントローラー) -> 3. _rand_show.html.erb(フォーム)

問題:今はクラッシュしますが、一度は機能しました(コーディングではそのようなことはないことは知っていますが、問題を見ることができません...)

<%= form_for(:task, :url => {:action =>'rand_task', :id => 'random'}) do |f|%>
<%= render(:partial => "rand_show", :locals => {:f => f}) %></p> 
<%end%>

コントローラ:

def rand_task
  @task = Task.order('RANDOM()').first
end

形:

<%= form_for(@task) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, :disabled=>true %>

  <div class="field">
    <%= f.label :category %><br />
    <%= f.text_field :category, :disabled=>true %>
  </div>
  <div class="actions">
    <%= f.submit "generate"%>
  </div>
<% end %>

サーバ:

Started GET "/" for 127.0.0.1 at 2012-09-13 19:35:56 +0300
Processing by TasksController#main as HTML
  Rendered tasks/_rand_show.html.erb (0.8ms)
  Rendered tasks/main.html.erb within layouts/application (1.6ms)
Completed 500 Internal Server Error in 4ms

ActionView::Template::Error (undefined method `model_name' for NilClass:Class):
    1: <%= form_for(@task) do |f| %>
    2:   <div class="field">
    3:     <%= f.label :name %><br />
    4:     <%= f.text_field :name, :disabled=>true %>
  app/views/tasks/_rand_show.html.erb:1:in `_app_views_tasks__rand_show_html_erb__183960888__627313568'
  app/views/tasks/main.html.erb:2:in `block in _app_views_tasks_main_html_erb__298912262__627495408'
  app/views/tasks/main.html.erb:1:in `_app_views_tasks_main_html_erb__298912262__627495408'

削除するよりも配置<%= form_for(@task _=Task.new_ ) do |f| %>すると機能しますが、インスタンスは1回だけです

4

2 に答える 2

1

このエラーは、この場合 @task オブジェクトが nil であることを示しています。「タスク」テーブルにレコードがあることを確認する必要があります。

于 2012-09-13T16:54:08.987 に答える
0

修正:私の場合、ローカル変数がconfig/routes.rbにテーブルを追加するために必要なアクセスを行うためにresources :tasks

編集:サーバーの再起動後の問題が続く。

于 2012-09-13T20:14:19.357 に答える