1

あなたが私を助けることができると信じてください。

レガシー コードに新しい機能を追加しようとしています (タイプミス)。しかし、ルーティングに問題があるようです。

プロジェクトでは、ルートは次の方法で生成されます。

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

rake ルートの出力:

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

1 に答える 1

0

コースのヒントを読んでください。

ヒント: HTML ではネストは無効です。

つまり、フォーム タグをネストすることはできません。フォーム タグを別のフォーム タグに配置しないでください。ネストされたフォームは正しいアクションを実行できません。

ページの最後にコードを配置する必要があるため、メインの編集記事のフォーム タグの下にマージ フォーム タグを配置する方法を試してみてください。したがって、基本的には大きなフォームタグが終了する場所を見つけて、その下に配置できます。

あなたがそれを理解できるかどうかを確認してみてください。そうでない場合は、遠慮なく尋ねてください:)

ところで。誰もがこれに問題を抱えていたと思います

于 2013-03-13T09:17:18.393 に答える