Rails 3:无法为遗留代码添加正确的路由

时间:2013-03-13 08:57:50

标签: ruby-on-rails routes erb legacy-code

相信你可以帮助我。

我正在尝试为遗留代码添加新功能(Typo)。但似乎路由存在一些问题。

在项目中,路由按以下方式生成:

%w{advanced cache categories comments content profiles feedback general pages
resources sidebar textfilters themes trackbacks users settings tags redirects seo post_types }.each do |i|
match "/admin/#{i}", :to => "admin/#{i}#index", :format => false
match "/admin/#{i}(/:action(/:id))", :to => "admin/#{i}", :action => nil, :id => nil, :format => false
end

我的功能是合并文章。为此,我在 / admin / content 控制器中添加了新操作:

def merge
#some code here
end

我添加的部分视图(_form.html.erb):

  <% if current_user.admin? and !@article.id.nil?%>
    <div class=''>  
      <h4><%= _("Merge Articles") %></h4>
      <%= label_tag :merge_with, 'Article ID' %><%= text_field_tag :merge_with, nil, :size => 20 %>
      <%= button_to 'Merge', admin_content_merge_path(:id => @article.id) %>
    </div>
  <%end%>

此部分由另一部分(_edit.html.erb)

呈现
<%= form_tag(form_action, :id => "#{form_type}_form", :enctype => "multipart/form-data", :class => className) do %>

  <%= render :partial => "form" %>

<% end %>

最后_edit.html.erb由视图new.html.erb

呈现
<%= render "admin/shared/edit", { :form_type => "article", :form_action => { :action => "new", :id => @article.id , :class => ('autosave')} } %>

问题是如何为上面的控制器操作编写正确的路由,这将允许我呈现包含新合并文章的编辑页面。我写道:

  match "/admin/content/merge/:id" => "admin/content#merge",:as => 'admin/content/merge'

佣金路线输出:

admin_content_merge        /admin/content/merge/:id(.:format) {:controller=>"admin/content", :action=>"merge"}

但正如我所见,正在调用新动作或编辑动作。

显然,我的路线错了,不是吗?

你能帮我解决这个问题。

提前致谢!

更新

最新 new.html.erb

<% @page_heading = _('New article') %>

<%= render "admin/shared/edit", { :form_type => "article", :form_action => { :action => "new", :id => @article.id , :class => ('autosave')} } %>
<% if current_user.admin? and !@article.id.nil?%>
<%= form_tag "/admin/content/merge/#{@article.id}" do %>
  <h4><%= _("Merge Articles") %></h4>
  <%= label_tag :merge_with, 'Article ID' %>:
  <%= text_field_tag :merge_with %><br />
  <%= submit_tag "Merge" %>
<% end %>
<% end %>

1 个答案:

答案 0 :(得分:0)

阅读课程中的提示:

提示:HTML中的嵌套无效。

这意味着您无法嵌套表单标记,也不会将表单标记放在另一个表单标记中,您的嵌套表单将无法执行正确的操作。

由于您必须将代码放在页面的末尾,因此请尝试在主编辑文章表单标记下方使用合并表单标记来完成此操作。所以基本上你可以找到大表格标签的结尾并将其放在它下面。

试着看看你是否能弄清楚,如果没有,请不要犹豫,问:)

顺便说一下。我想每个人都有这个问题