我有一个没有索引页面的调查模型。我只想要这个模型的编辑视图,但似乎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 %>
答案 0 :(得分:0)
它不应该仅仅询问surveys_path
是否定义了一个表单,但是你的控制器代码中有一些奇怪的东西可能会让你感到悲伤。
persisted?
您是否定义了此模型的路线?您应该在路径文件中包含以下内容:
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 %>