10

我有一个表格:

  %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?

4

2 回答 2

10

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 控制器不会接受没有此真实性令牌值提交的表单。这是为了防止跨站请求伪造

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

请参阅FormTagHelper API以供参考。

于 2012-05-01T20:53:29.790 回答
0

我使用以下代码使其工作:

  = form_tag rotas_path do
    = label :rota, :name, 'Name'
    = text_field :rota, 'name'
    = submit_tag 'Save Changes'
于 2012-05-01T21:03:35.577 回答