这个问题会有点令人费解,因为我是 RoR 的新手,但我被扔进了我班级的一个相对较大的 RoR 项目。为此,我深表歉意,但我会尽力澄清。我欣然承认,一开始我们可能做错了。
所以无论如何,情况如下:
我们最初试图恢复一些由专业公司构建的遗留代码并接近,但最终没有运气。
正因为如此,我们开始了一个新项目,并使用脚手架来构建我们项目的结构。
我们使用了遗留项目中的大量代码,但最终添加的代码比我们实际使用的要多得多。现在我们不确定什么需要什么不需要。
长话短说,我们有一个工作项目,但最近尝试使用 devise 将我们的功能按用户和管理员分开(我不确定到什么程度)。在这样做时,我们将管理控制器和视图分离到一个管理子文件夹中,这样我们就有了“/controllers/admin/events”和“/controllers/events”,我们的视图也一样。我们的想法是,我们的管理员和用户有一个单独的视图(同样,相当肯定这不是正确的方法)。
我几乎可以肯定我们做错了,但它最终让我想到了这个问题:
我们更改了 routes.rb 以将我们的资源包含在管理命名空间下,如下所示:
namespace :admin do
resources :form_defs do
resources :questions
end
end
但是当我尝试像我们最初那样做类似“link_to @form_defs”的事情时,它仍然尝试路由到 form_defs_questions_path 而不是 admin_form_defs_questions_path
我认为我的问题只是如何更改课程以使其正确路由?
如果有更好的方法我们应该做到这一点,基本上不涉及重新启动项目,我全神贯注。
我想我需要更改我的对象默认路由到的位置:
我遇到问题的代码是一个创建新问题的表单生成器。这是我们为此使用的代码:
<div id="new-question-form">
<h2 id="add-question-title">Add Question</h2>
<%= form_for([@form_def,@form_def.questions.build]) do |f| %>
<div class="new-question-field">
<strong><%= f.label :format %></strong>
<%= f.select(:format, [["Short Answer","1"]]) %>
</div>
<div class="new-question-field">
<strong><%= f.label :title %></strong>
<%= f.text_field :title %>
</div>
<div class="actions">
<%= f.submit "Add Question", :class => "small-gray-button", :id => "add-question-button"%>
</div>
<% end %>
</div>
导致问题的具体线路是这样的:
<%= form_for([@form_def,@form_def.questions.build]) do |f| %>
我查看了“form_for()”的文档,但是对于 RoR 来说是新手,解释并没有太大帮助。
因此,当我到达代码中的这一点时,它显然试图路由到“form_def_questions_path”而不是“admin_form_def_questions_path”。我已经尝试过:
<%= form_for([admin_form_def_questions_path(@form_def),@form_def.questions.build]) do |f| %>
但它似乎需要一个对象作为输入,而不是路径。
再一次,我意识到可能有更好的方法来做到这一点,所以如果你有一个建议,我会全力以赴。谢谢!