Rails&

Rails & Haml: cant get a form to work

我有一张表格:

1
2
3
4
5
6
7
  %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方法。

感谢您的帮助!谢谢!

顺便说一句,我是使用scaffold生成的——似乎相同的表单用于编辑模型和创建。它如何知道是做一个帖子还是一个看跌期权?


1)要将表单的目标放入操作中:

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

2)您需要提交按钮,而不是链接。试试这个:

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

另外,我不知道为什么你要在输入之后放一个/,这对任何东西都不需要。我不觉得疼,但我看不出有什么理由把它包括进去。

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

1
2
3
4
5
6
7
= 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将在表单中为您包含一个隐藏的真实性令牌字段,通常Rails控制器不会接受没有这个真实性令牌值提交的表单。这是为了防止跨站点请求伪造。

试试这个看看你能得到什么。

请参阅FormTagHelper API以获取参考。


我用以下代码让它工作:

1
2
3
4
  = form_tag rotas_path do
    = label :rota, :name, 'Name'
    = text_field :rota, 'name'
    = submit_tag 'Save Changes'