在设计中添加管理功能后更改路线

问题描述:

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

导致问题的具体路线是这样的:

<%= 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| %> 

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

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

你可以写全路由器admin_form_defs_questions_path(@form_defs),或者你可以定义命名空间link_to [:admin, @form_defs]

+0

我尝试过,但不幸的是,在我的具体情况下,这并不完全正常。我在我的帖子中增加了一些说明,因为我的问题不一定是“link_to”相关的(我应该更好地解释过),但它似乎以某种方式与路由/路径相关联。对困惑感到抱歉! – JustJason

从事过这样一个类似的项目。我们以同样的方式接近管理员/用户界面。

你需要开始做的是停止依靠钢轨猜测你的事情,并手动指定它们。

例如

<%= 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) %> 

这使您对哪些用户之间的分离,可以很好的控制看/做,可以看到管理员/做

+0

很高兴知道。我只是认为像这样硬编码的东西通常被认为是不好的做法,所以我们试图避免它。 “呈现部分:”和“本地人:”究竟做了什么? 此外,我在我的帖子中增加了一些更多的说明,因为我的问题并不完全是link_to相关的,但更多的是与对象和表单构建器相关。 – JustJason