0

我有关注

<%= form_tag lessons_path, :method => 'get', :name => "filter_form" do %>
  <div class="btn-group" data-toggle-name="is_private" data-toggle="buttons-radio" >
  <button value="0" class="btn" data-toggle="button">Public</button>
  <button value="1" class="btn" data-toggle="button">Private</button>
</div>

当用户单击其中任何一个按钮时,表单会提交并转到我的课程#index。我怎样才能得到用户点击的值?我知道 params[:something] 通常来自 url 中的 GET 请求,但是在这种情况下呢?

谢谢

4

3 回答 3

3

只需提供您的按钮name属性:

<%= form_tag lessons_path, :method => 'get', :name => "filter_form" do %>
  <div class="btn-group" data-toggle-name="is_private" data-toggle="buttons-radio" >
    <button name="public"  type="submit" value="0" class="btn" data-toggle="button">Public</button>
    <button name="private" type="submit" value="1" class="btn" data-toggle="button">Private</button>
  </div>
<% end %>

然后params像往常一样在您的控制器中检查:

if(params[:public])
    # public has pressed
elsif(params[:private])
    # private was pressed
else
    # Hmm, someone is trying to cause trouble.
end

您会注意到,我在 s 中添加type="submit"<button>一些浏览器type="submit"作为默认值(根据标准)和一些使用type="button",因此最好是明确的。

于 2012-04-25T05:22:12.333 回答
1

在 rails 中,params 哈希将包含所有已提交/传递到页面的元素。这包括 GET 参数和 POST 参数。您应该使用复选框(或单选按钮)来表示此类数据。如果您的字段存在于数据库中,那么您应该执行以下操作:

<br><%= f.check_box :is_private %> Private

然后,您可以使用params[:is_private]

如果你想使用按钮,那么我建议创建两个 url 来切换复选框的状态。否则,您将不得不依赖 JavaScript 来更改字段。

如果你想使用按钮,但也使用相同的更新 url,那么你需要按下按钮来切换复选框的状态,有 JQuery 插件可以做到这一点(一个例子是http://widowmaker.kiev .ua/复选框/)。

于 2012-04-25T05:12:26.120 回答
1

一个表单只会提交一个动作。

使用 i18n 定义按钮文本,然后检查控制器操作中提交参数的 i18n 值

例如在你的表格中

<%= submit_tag I18n.t('checkout.button.place_order'), :class => "submit" %>

这同样适用于 f.submit 按钮。

然后在你的控制器中

if params[:commit] == I18n.t('checkout.button.place_order')
  Do something
else
  Do something else
end

在您的 en.yml 或任何定义实际文本的内容中

en:
  checkout:
    button:
      place_order: 'Place Order'

显然只是调整以满足您的需求

通过使用 i18n,您可以轻松更改 i18n 定义中按钮上的文本,而不会影响您的控制器逻辑,并且仍然可以处理您希望使用的任何国际化/翻译

使用它,您可以在单个表单上设置任意数量的按钮,然后在控制器操作中添加您需要的任何条件逻辑

更新 I18n 是国际化的缩写(单词中有 18 个字符 :)),只需在名为 en.yml 的语言环境文件夹中创建一个文件,然后以我上面描述的格式定义您需要的任何内容,您就可以开始了。使用 t 在任何需要它们的地方引用 I18n 变量。helper 看看这个 railscast 以获得更详细的解释 http://railscasts.com/episodes/138-i18n

更新 2回应 mu is too short 的评论如下

为什么不只添加一个名称属性?然后您可以使用独立于其内容的按钮。请记住,a 可以包含嵌入的 HTML,这在 param 中没有多大意义

使用 i18n 会使该注释完全无效,因为根本不检查文本。你可以随心所欲地制作文本,使用 I18n 确实是一个好习惯。请注意,在上面的示例中,您正在检查控制器“checkout.button.place_order”中的常量,而不是定义为“Place Order”的值。

于 2012-04-25T05:55:39.220 回答