1

Rails の form_tag に問題があります。sendrequest という未定義のメソッドまたはローカル変数があることを示しています。ただし、コントローラーでこれを定義しました。私は何が欠けていますか?(PS 私は Rails を初めて使用するので、不適切な構文を見つけた場合はお知らせください)。ありがとう!

ここに私のhome.html.erbがあります:

<% form_tag sendrequest %>
    <%=check_box_tag "friendids[]", 12345 %> 
    <%=check_box_tag "friendids[]", 67890 %>
    <%= submit_tag "send requests"%>
<% end_form_tag %>

私の game_pages_controller には、現在 sendrequest の空の関数があります。

def sendrequest
end

my routes は、ゲーム ページをホームにルーティングするだけです。

root to: 'game_pages#home'
match '/home', to: 'game_pages#home'

チェックボックスの目的は、ユーザーが選択したい友人のリストを取得することです。ただし、これをデータベースに追加する必要はありません。そのため、友人のモデルはありません。フォームを送信するとフレンド ID が反復処理され、何らかの機能が実行されるように、JavaScript を使用したいと思います。そのため、友人モデルを保持する必要はなく、チェックボックスは実際には現在のユーザーのモデルを更新しません。

ここで何が欠けていますか?

4

2 に答える 2

0

ビューでコントローラーのメソッドを使用する場合は、コントローラーに使用してビューコンテキストにメソッドを含めるように指示する必要がありhelper_methodます。

class GamePagesController < ApplicationController

  def sendrequest
  end
  helper_method :sendrequest
end

コントローラーでそのメソッドを実際に使用しない限り、実際にはヘルパー モジュールに属し、その場合は自動的にビュー コンテキストに含まれます。

また、コードにはさらにいくつかの問題があります。

<%= form_tag sendrequest do %>
  <%= check_box_tag 'friendids[]', 12345 %>
  <%= check_box_tag 'friendids[]', 67890 %>
  <%= submit_tag 'send requests' %>
<% end %>

基本的に、フォーム タグは、通常の erb ではなく、出力 erb でラップする必要があります。そうしないと、コードがバッファーに出力されません。end_form_tag はありません。代わりに、通常の ruby​​ の do/end ブロック構文を使用します。そのブロック内のすべてがフォームタグでラップされます。

于 2013-02-24T05:12:54.707 に答える
0

フォームをアクションに移動させたい場合はsendrequest、ルートを設定し、それをフォームで使用する必要があります。

# routes
match '/sendrequest' => 'game_pages#sendrequest', as: :sendrequest

# view
<%= form_tag sendrequest_path do %>

これが設定方法です。ビューの URL をコントローラーのアクションに一致させます。

于 2013-02-24T05:23:01.577 に答える