0

私はフォローを持っています

<%= form_tag lessons_path, :method => 'get', :name => "filter_form" do %>
  <div class="btn-group" data-toggle-name="is_private" data-toggle="buttons-radio" >
  <button value="0" class="btn" data-toggle="button">Public</button>
  <button value="1" class="btn" data-toggle="button">Private</button>
</div>

ユーザーがこれらのボタンのいずれかをクリックすると、フォームが送信され、レッスン#index に移動します。ユーザーがクリックした値を取得するにはどうすればよいですか? params[:something] は通常、URL の GET リクエストから来ることは理解していますが、この場合はどうでしょうか。

ありがとう

4

3 に答える 3

3

ボタンのname属性を指定するだけです:

<%= form_tag lessons_path, :method => 'get', :name => "filter_form" do %>
  <div class="btn-group" data-toggle-name="is_private" data-toggle="buttons-radio" >
    <button name="public"  type="submit" value="0" class="btn" data-toggle="button">Public</button>
    <button name="private" type="submit" value="1" class="btn" data-toggle="button">Private</button>
  </div>
<% end %>

次にparams、コントローラーで通常どおり確認します。

if(params[:public])
    # public has pressed
elsif(params[:private])
    # private was pressed
else
    # Hmm, someone is trying to cause trouble.
end

sに追加type="submit"したことに注意してください。一部のブラウザーはデフォルトとして使用し (標準に従って) 、一部のブラウザーは明示的に使用するのが最善です。<button>type="submit"type="button"

于 2012-04-25T05:22:12.333 に答える
1

フォームは 1 つのアクションにのみ送信されます。

i18n を使用してボタン テキストを定義し、コントローラー アクションのコミット パラメータの値の i18n 値を確認します。

例えばあなたの形で

<%= submit_tag I18n.t('checkout.button.place_order'), :class => "submit" %>

f.submit ボタンについても同様です。

次に、コントローラーで

if params[:commit] == I18n.t('checkout.button.place_order')
  Do something
else
  Do something else
end

en.yml または実際のテキストを定義するもの

en:
  checkout:
    button:
      place_order: 'Place Order'

もちろん、ニーズに合わせて調整するだけです

i18n を使用すると、コントローラーのロジックに影響を与えることなく、i18n 定義のボタンのテキストを簡単に変更でき、使用したい国際化/翻訳で引き続き機能します。

これを使用して、1 つのフォームに好きなだけボタンを設定し、必要な条件付きロジックをコントローラー アクションに追加できます。

UPDATE I18n は国際化の略です (単語で 18 文字:))。en.yml という名前のロケール フォルダーにファイルを作成し、必要なものを上記の形式で定義すれば、準備完了です。t を使用して、必要な場所で I18n 変数を参照します。ヘルパー 詳細な説明については、この railscast をご覧ください http://railscasts.com/episodes/138-i18n

更新 2以下の mu is too short のコメントに応えて

name 属性を追加しないのはなぜですか? 次に、コンテンツに関係なくボタンを操作できます。a には、param 内にあまり意味のない埋め込み HTML を含めることができることに注意してください。

i18n を使用すると、テキストがまったくチェックされないため、このコメントは完全に無効になります。好きなようにテキストを作成できます。実際、I18n を使用することをお勧めします。上記の例では、「Place Order」として定義されている値ではなく、コントローラー「checkout.button.place_order」の定数をチェックしていることに注意してください。

于 2012-04-25T05:55:39.220 に答える
1

Rails では、params ハッシュには、ページに送信/渡されたすべての要素が含まれます。これには、GET パラメータと POST パラメータが含まれます。このタイプのデータを表すには、チェック ボックス(またはラジオ ボタン) を使用する必要があります。フィールドがデータベースに存在する場合は、次のことを行う必要があります。

<br><%= f.check_box :is_private %> Private

その後、データにアクセスできますparams[:is_private]

ボタンを使用する場合は、チェック ボックスの状態を切り替える 2 つの URL を作成することをお勧めします。そうしないと、JavaScript に依存してフィールドを変更する必要があります。

ボタンを使用したいが、同じ更新 URL も使用したい場合は、ボタンを押してチェック ボックスの状態を切り替える必要があります。これを実行できる JQuery プラグインがあります (一例はhttp://widowmaker.kiev です)。 .ua/checkbox/ )。

于 2012-04-25T05:12:26.120 に答える