我有一张表格:
%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?
答案 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'