Rails&哈姆:不能得到一份工作表格

时间:2012-05-01 20:36:52

标签: ruby-on-rails forms haml

我有一张表格:

  %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中有一个:资源变量,我的控制器有一个def创建方法。

任何帮助表示赞赏!谢谢!

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

2 个答案:

答案 0 :(得分: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控制器不接受在没有此真实性标记值的情况下提交的表单。这是为了防止Cross-Site Request Forgery

试一试,看看你得到了什么。

请参阅FormTagHelper API以供参考。

答案 1 :(得分:0)

我使用以下代码使用它:

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