【问题标题】:Rails & Haml: cant get a form to workRails & Haml:无法让表单工作
【发布时间】:2012-05-11 08:26:07
【问题描述】:

我有一个表格:

  %form{:action:method => "post"}
    %fieldset
      %label{:for => "title"} Title:
      %input{:name => "title", :type => "text", :value => ""}/
      %label{:for => "notes"} Notes:
      %input{:name => "notes", :type => "text", :value => ""}/
    %a.finish{:href => "/rotas", :method => "post"} Finish!

但是,该链接似乎无法正常工作-也许我缺少 Haml 或 Rails 中的一些基本内容。

我的 routes.rb 中有一个 :resource rotas,我的控制器有一个 def create 方法。

感谢任何帮助!谢谢!

顺便说一句。我使用脚手架生成 - 似乎相同的表单用于编辑模型和创建。它如何知道是执行 POST 还是执行 PUT?

【问题讨论】:

  • 注意:我更新了我的答案,我一开始以为问题很简单,然后意识到你还有更多问题。

标签: ruby-on-rails forms haml


【解决方案1】:

1) 你想把表单的目标放在动作中:

%form{ :action => "/rotas", :method => "post" }

2) 你想要一个提交按钮,而不是一个链接。试试这个:

%input{ :type => "submit" } Finish!

另外,我不确定您为什么要在输入后添加/,这对任何事情都不需要。我不认为这很痛苦,但我认为没有理由包含它。

3) 最后,Rails 约定不使用 haml 元素,而是使用表单助手,如下所示:

= form_tag '/rotas' do
  = field_set_tag do
    = label_tag :title, 'Title:'
    = text_field_tag :title
    = label_tag :notes, 'Notes:'
    = text_field_tag :notes
    = submit_tag 'Save Changes'

这样做的一个原因是 Rails 将在表单中为您包含一个隐藏的 Authenticity Token 字段,通常 Rails 控制器不会接受没有此真实性令牌值提交的表单。这是为了防止Cross-Site Request Forgery

试试这个,看看你会得到什么。

请参阅FormTagHelper API 以供参考。

【讨论】:

  • 没有这样做 - 但是,我让它以另一种方式工作......查看我的答案
  • 我刚刚开始工作 - 我已将其发布为答案 - 你认为呢?
  • 如果您像我在回答中所做的那样添加 submit_tag '保存更改',则将您的回答标记为已接受;)
  • 很好,很高兴你把它修好了。我两次意识到有更重要的信息要添加到答案中,所以现在我认为它是最终版本(包括提交标签)。很抱歉一直在改变它!
  • 哈哈,我们几乎在同一时间发表评论,但页面加载使这些看起来乱序。提交标签已添加,感谢您了解。
【解决方案2】:

我使用以下代码让它工作:

  = form_tag rotas_path do
    = label :rota, :name, 'Name'
    = text_field :rota, 'name'
    = submit_tag 'Save Changes'

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 2012-05-31
    • 2013-05-13
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多