1

さて、この質問は html.erb コードの適切な構文に関係しています。私がやろうとしているのは、ポップオーバー ボタンを使用してフォームを表示することです。button_tag 関数を使用してボタンを作成でき、form_tag 関数からフォームを作成できますが、一方を他方の内部に埋め込むことはできません。これが私がやるべきことであるかどうか、私は完全には確信していません。私の理解では、ベスト プラクティスは、erb を使用してページを生成できる場合は、html を使用しないことです。

とにかく、ここに私がこれまでに持っているコードがあります:

<%= button_tag "Remove Friend", :title=>"Remove from Friend List", 
    :id=>"removeFriend", :class=>"btn btn-default", :rel=>"popover", 
    :data => {:html=>"true", :placement=>"top", :content=>
    "form_tag(\"/friend\", method: \"post\") do 
        label_tag(:symbolInput, \"Enter Username\")
    text_field_tag(:symbolInput)
    submit_tag(\"Remove\") 
end"}%>

これが行うことは、次の HTML を生成することです。

<button class="btn btn-default" data-content="form_tag(&quot;/friend&quot;, 
    method: &quot;post&quot;) do 
    label_tag(:symbolInput, &quot;Enter Username&quot;)
    text_field_tag(:symbolInput)
    submit_tag(&quot;Remove&quot;) 
    end" data-html="true" data-placement="top" id="removeFriend" 
    name="button" rel= "popover" title="Remove from Friend List" 
    type="submit">Remove Friend</button>

したがって、本質的には、文字通り erb コードをテキストとしてポップオーバーにコピーしただけです。

また、各行を <%= %> でフレーミングしようとしましたが、これの構文がどうなるか、またはいつそれを行うべきかについては非常に不明です。

基本的に、フォームの erb を html に変換する必要があります。これは、button_tag の :content セクションに渡されます。

私はこの方法でこれを行うべきですか、それとも私がやろうとしていることを達成するための他の方法はありますか? Railsは初めてなので、ベストプラクティスが何であるかわかりません。

ちなみに、html を使用してフォームまたはボタンのいずれかをコーディングし、erb をもう一方に使用すると、完全に機能するため、回避策があります。

4

1 に答える 1

1

埋め込まれた Ruby タグ (<% %> など) の内側にいる瞬間、ここで行うことはすべて単なるルビです。別の言い方をすれば、有効なルビでなければならず、どのルビでもかまいません。

私が行う最初のリファクタリングは、すべてのコンテンツ コードを独自のものから移動することです。この中間点はより整然としており、より良いアイデアを提供するはずです.

<% remove_friend_form = "form_tag(\"/friend\", method: \"post\") do 
        label_tag(:symbolInput, \"Enter Username\")
    text_field_tag(:symbolInput)
    submit_tag(\"Remove\") end" %>

<%= button_tag "Remove Friend", :title=>"Remove from Friend List", 
    :id=>"removeFriend", :class=>"btn btn-default", :rel=>"popover", 
    :data => {:html=>"true", :placement=>"top", :content=> remove_friend_form }%>

コンテンツを分離すると、「remove_friend_form」がさらに分離される可能性があることが明らかになります。これを行うには、このコンテンツを独自のパーシャルに移動します。

# create new file in the same folder as the current view.
# _remove_friend_form.html.erb

<%= form_tag("friend", method: "post") do |f| %>
  <%= f.label_tag(:symbolInput, "Enter Username") %>
  <%= f.text_field_tag(:symbolInput) %>
  <%= f.submit_tag("Remove") %>
<% end %>

メインページは現在このようになっています

<%= button_tag "Remove Friend", :title=>"Remove from Friend List", 
    :id=>"removeFriend", :class=>"btn btn-default", :rel=>"popover", 
    :data => {:html=>"true", :placement=>"top", :content=> (render partial: 'remove_friend_form') }%>
于 2014-05-17T02:54:14.703 に答える