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で基本的なものが欠落している可能性があります。

ルート.rbに:resource rotasがあり、コントローラーにdefcreateメソッドがあります。

どんな助けでも大歓迎です!ありがとう!

ところで。私はscaffoldを使用して生成しましたが、モデルの編集と作成に同じフォームが使用されているようです。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'

この理由の1つは、Railsがフォームに非表示のAuthenticity Tokenフィールドを含めることであり、通常、Railsコントローラーはこの信頼性トークン値なしで送信されたフォームを受け入れません。これは、クロスサイトリクエストフォージェリを防ぐためです。

これを試して、何が得られるかを確認してください。

参考のためにFormTagHelperAPIを参照してください。

于 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 に答える