【问题标题】:Rails: Multiple parameters before do?Rails:多个参数之前呢?
【发布时间】:2009-01-22 17:08:25
【问题描述】:

我有这个有效的语法(因为它几乎来自 API)

  <% form_tag :action => "whatever" do -%>
    <div><%= submit_tag 'Save' %></div>
  <% end -%>

这个,有效的

<%=  form_tag({:action => "whatever"}, {:method => "get"})%>

现在我尝试将它们组合起来,猜测语法。 “get”没有像我希望的那样被添加为表单方法。这应该怎么读?

  <% form_tag :action => "whatever",:method => "get"  do -%>
    <div><%= submit_tag 'Save' %></div>
  <% end -%>

表单标签应为:

<form action="hello/whatever" method="get"/> 

不是

<form action="hello/whatever?method=get" />

【问题讨论】:

    标签: ruby-on-rails ruby syntax


    【解决方案1】:
    <% form_tag({:action => 'whatever'}, :method => "get")  do -%>
          <div><%= submit_tag 'Save' %></div>
    <% end -%>
    

    查看API docs,问题是:method 需要进入options 散列,:action 需要进入url_for_options 散列,并且您需要额外的大括号以便解释器知道它们是不同的哈希值。

    【讨论】:

    • +1,使用带有两个 = {} 参数的方法声明,您必须指出一个哈希何时结束而另一个哈希何时开始。 {:action => 'whaterver'}, :method => "get" 这样做。
    【解决方案2】:

    我想说最好的方法是不要使用匿名路由名称,而是使用命名路由。这样会更好更干净,例如

    <% form_tag discussions_path, :method => 'get' do %>
      <div><%= submit_tag 'Save' %></div>
    <% end %>
    

    【讨论】:

    【解决方案3】:

    你试过了吗

    <% form_tag(:action => "whatever", :method => "get")  do -%>
        <div><%= submit_tag 'Save' %></div>
    <% end -%>
    

    ri form_tag 也为您提供示例。

    【讨论】:

    • 是的。将 action 属性设置为 /hello/input002?method=get 这不是想法 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多