使用设计

时间:2017-04-06 20:13:39

标签: ruby-on-rails ruby devise que

这个问题有点令人费解,因为我是RoR的新手,但却被我的班级投入了一个相对较大的RoR项目。为此,我道歉,但我会尽力清楚。我很乐意承认,从一开始我们可能会犯这种可怕的错误。

所以,无论如何,情况如下:

  • 我们最初试图恢复由专业公司建立的一些遗留代码并且接近但最终没有运气。

  • 因此,我们开始了新项目并使用脚手架来构建项目的结构。

  • 我们使用了遗留项目中相当数量的代码,但最终添加了比我们实际使用的更多的代码。现在我们还不确定需要什么,不是什么。

  • 长话短说,我们有一个工作项目,但最近尝试通过用户和管理员使用设计来分离我们的功能(我不确定到什么程度)。在这样做的过程中,我们将管理控制器和视图分成了一个管理子文件夹,这样我们便可以使用" / 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>
&#13;
&#13;
&#13;

导致问题的具体行是:

<%= form_for([@form_def,@form_def.questions.build]) do |f| %>

我查找了&#34; form_for()&#34;的文档,但是对RoR不熟悉,解释并没有多大帮助。

所以当我在代码中达到这一点时,它显然试图路由到&#34; form_def_questions_path&#34;而不是&#34; admin_form_def_questions_path&#34;。我试过制作它:

<%= form_for([admin_form_def_questions_path(@form_def),@form_def.questions.build]) do |f| %>

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

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

2 个答案:

答案 0 :(得分:0)

您可以编写完整路由器foreach (var role in listBox.Items.OfType<Role>()) { if(role.IsChecked) { //... } } ,也可以定义命名空间admin_form_defs_questions_path(@form_defs)

答案 1 :(得分: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) %>

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

相关问题