Rails:form_for活动记录对象抱怨没有索引路径

时间:2013-06-06 21:53:28

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

我有一个没有索引页面的调查模型。我只想要这个模型的编辑视图,但似乎rails不会让我这样做。当我尝试使用undefined method surveys_path时,它会抱怨form_for(@survey)。无论如何都可以在不创建空索引路径/视图的情况下执行此操作。

到目前为止,这是我的调查控制器

class SurveysController < ApplicationController

  def show
    @survey = Survey.find(params[:id])

  end

  def edit
    @survey = Survey.new
    job = Job.find(params[:id])
    @survey.job_id = job.id
    authorized_user = job.user
    unless !is_runner?(current_login) && current_login.id == authorized_user.id
        redirect_to jobs_path
    end
  end

  def update
    @survey = Survey.new(params[:survey])

  end

end

这是在edit.html.erb

中部分呈现的表单
<%= form_for(@survey) do |f| %>
  <div class="field">
    <%= f.label :speed %><br />
    <%= f.text_field :speed %>
  </div>
  <div class="field">
    <%= f.label :service %><br />
    <%= f.text_field :service %>
  </div>
  <div class="field">
    <%= f.label :suggestion %><br />
    <%= f.text_area :suggestion %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

3 个答案:

答案 0 :(得分:0)

它不应该仅仅询问surveys_path是否定义了一个表单,但是你的控制器代码中有一些奇怪的东西可能会让你感到悲伤。

  1. 您的编辑操作应该在RESTful应用程序的调查控制器中使用该参数[:id]来查找现有调查,为什么找工作?它应该与你的节目动作一样。
  2. 调查编辑方法中的调查对象是新的且未保存,因此表单构建器将生成指向创建操作而非更新操作的表单。表单构建器将仅为persisted?
  3. 的记录生成编辑表单

    您是否定义了此模型的路线?您应该在路径文件中包含以下内容:

    resources :surveys, :except => [:index] # will create all rest routes for survey model except for an index route.
    

答案 1 :(得分:0)

如果您错误地将模型/表格作为复数而非单数运行,则会出现此错误。你可能会跑这样的事情:

rails generate model surveys

而不是:

rails generate model survey

所以,如果你跑:

rake routes

您可能会看到所有路线都有's'即。 surveys_new。

所以,rails很困惑。您需要在迁移中重命名表。

class ChangePluralNametoSingularforSurveys< ActiveRecord:Migration
  def change
    rename_table :surveys, :survey
  end 
end

然后你必须手动重命名你的文件(surveys.rb等)。

答案 2 :(得分:0)

对我来说,问题是嵌套路线。如果您的对象具有父对象并且其路由是嵌套的,则您需要执行以下操作:

<%= form_for([@category, @survey]) do |f| %>
  ...
<% end %>