在Rails中使用(提交)按钮的方式与文本区域或类似方式相同

时间:2013-07-04 02:36:26

标签: ruby-on-rails ruby ruby-on-rails-4

在Rails中,我有一个像这样的Slim代码块:

= form_for :paste do |f|
  = f.text_field :name, placeholder: 'Title
  = f.button :priority, type: :submit, value: 0 do
    | Priority 0
  = f.button :priority, type: :submit, value: 1
    | Priority 1

查看HTML,我发现text_field按预期有name="paste[name]"

但是,按钮元素没有,只是name="button"

如何让rails为元素指定正确的名称?

1 个答案:

答案 0 :(得分:0)

button documentation类似意味着你总是得到name="button"。但这是Rails,唯一可以确定它将做什么的方法是阅读源代码。如果我们查看button,我们会发现它只是button_tag周围的薄包装:

def button(value = nil, options = {}, &block)
  value, options = nil, value if value.is_a?(Hash)
  value ||= submit_default_value
  @template.button_tag(value, options, &block)
end

如果我们查看button_tag,我们会看到此name="button"废话的来源:

options.reverse_merge! 'name' => 'button', 'type' => 'submit'

content_tag :button, content_or_options || 'Button', options, &block

如果您不想name,我认为您必须在HTML选项中手动指定name="button"属性。或者你可以抛弃助手(因为他们没有完全帮助)并自己构建按钮content_tag甚至原始HTML。