0

这个问题会有点令人费解,因为我是 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| %>

但它似乎需要一个对象作为输入,而不是路径。

再一次,我意识到可能有更好的方法来做到这一点,所以如果你有一个建议,我会全力以赴。谢谢!

4

2 回答 2

0

您可以编写完整的路由器admin_form_defs_questions_path(@form_defs),也可以定义命名空间link_to [:admin, @form_defs]

于 2017-04-06T20:21:35.757 回答
0

从事过类似的项目。我们以同样的方式处理管理/用户界面。

您需要开始做的是停止依赖 Rails 为您猜测事物,并手动指定它们。

例如

<%= render  @form_defs %>
<%= link_to @form_defs %>

会变成这样:

<%= render partial: 'admin/form_defs/questions', locals: {form_defs: @form_defs} %>
<%= link_to admin_form_defs_questions_path(@form_defs) %>

这使您可以很好地控制用户可以查看/执行的操作和管理员可以查看/执行的操作之间的划分

于 2017-04-06T20:25:49.923 回答