2012-05-01 6 views
9

を動作するようにフォームを取得カント:レール&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に:resource rotasを持っていて、私のコントローラにはdef createメソッドがあります。

ご協力いただきましてありがとうございます。ありがとう!

btw。私は骨格を使って生成しました - そして、同じフォームがモデルの編集と作成のために使われているようです。 POSTまたはPUTのどちらを行うかはどのように分かりますか?

+0

注:私は私の答えを更新し、私はこの問題は、あなたが起こって多くの問題を持っていたが実現、最初にシンプルだと思いました。 – Andrew

答えて

10

1)あなたは、アクションにフォームのターゲットを配置する:

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

2)あなたが送信ボタンではなく、リンクをしたいです。このお試しください:あなたは何のために必要ではないです、あなたの入力した後/を入れている理由も

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

を、私はわかりません。私はそれが痛いとは思わないが、私はそれを含める理由はないと思う。

3)最後に、次のようになりヘルパーを形成HAML要素を使うのではなくするためにされていないRailsの慣例、このため

= 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を参照してください。

+0

それはしませんでした - しかし、私は別の方法を働いて...私の答えを確認してください – Karan

+0

ああ、ちょうどあなたの変更を見た... – Karan

+0

私はちょうどそれが働いて - 私は答えとして投稿しました - 何ですか何か? – Karan

0

私はそれが次のコードを使用して作業しました:

= form_tag rotas_path do 
    = label :rota, :name, 'Name' 
    = text_field :rota, 'name' 
    = submit_tag 'Save Changes' 
関連する問題