3

我有一个没有索引页面的调查模型。我只想要这个模型的编辑视图,但似乎 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 %>
4

3 回答 3

0

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

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

您是否为该模型定义了路线?您的路线文件中应该有如下内容:

resources :surveys, :except => [:index] # will create all rest routes for survey model except for an index route.
于 2013-06-06T23:21:28.683 回答
0

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

rails generate model surveys

而不是这个:

rails generate model survey

所以,如果你运行:

rake routes

您可能会看到您的所有路线都有一个“s”即。调查_新。

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

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

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

于 2013-08-28T04:43:16.867 回答
0

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

<%= form_for([@category, @survey]) do |f| %>
  ...
<% end %>
于 2015-06-01T14:09:11.710 回答