2013-03-13 62 views
1

相信你可以幫助我。Rails 3:無法爲遺留代碼添加正確的路由

我正在嘗試向遺留代碼(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 

我的功能有關合並的文章。對於我已經在/管理/內容增加了新的動作控制器:

def merge 
#some code here 
end 

一塊的圖部分(_form.html.erb)的加入通過我:

<% if current_user.admin? and [email protected]?%> 
    <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 [email protected]?%> 
<%= 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 %> 

回答

0

閱讀從課程提示:

提示:嵌套是無效HTML。

這意味着您不能嵌套窗體標籤,不要將窗體標籤放在另一個窗體標籤中,您的嵌套窗體將無法做出正確的操作。

由於您必須將代碼放在頁面末尾,請嘗試查看如何通過在主編輯文章表單標記下方放置合併表單標記來完成此操作。所以基本上你可以找到大表單標籤結束的位置並將其放在它下面。

試試,看看你自己看着辦吧,如果沒有,請不要猶豫,問:)

順便說一句。我想每個人都有這個問題

+0

感謝您的快速響應!嗯......據我所知,嵌套是在部分內部調用某種形式的助手,例如, ** form_for **,我認爲這是非法的。在我的情況下嵌套在哪裏? – niebelung 2013-03-13 09:40:00

+0

你可能有一個嵌套的形式,因爲你得到這個錯誤(同樣的事情發生在我身上)。嵌套的form_for將是另一個** form_for **中的** form_for **。 – Zippie 2013-03-13 09:43:23

+0

你看到你把代碼放在哪裏嗎?你把這個表單放到另一個表單中。那就是築巢形式:) – Zippie 2013-03-13 09:46:04