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 标签(例如 <% %>)时,您在此处所做的一切都只是 ruby​​,或者换一种说法,它必须是有效的 ruby​​,可以是任何 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 回答