2012-01-30 11 views
0

私のコントローラでは、私は2つのアクション:"Select_users""Make_something"を持っています。 "Select_users"では、私は@varのユーザーリストを持っています(このユーザーは、同じビューのフォームを使って検索して生成されます)...RoR:同じコントローラー内のあるアクションから別のアクションに変数を使用するにはどうすればよいですか?

@var.each do |v| 
    Table.create(:atribute => v.name) 
    end 

私が選択したユーザーのリストを持っているとき、私は「Make_something」アクションに私を送るために「送信」ボタンを使用します。

私はこれを作成するために "Make_something"アクションに@var変数を渡すことを考えていましたが、 "Select_users"でのみアクセス可能であるため "Make_something"に@varを使用することはできません。

私はフィルタについて読んだが、私はこの問題で私を助けないと思う。

ありがとうございます!

+0

これをチェックしてくださいsession[:something]

を使用したい場合は、あなたの実際のコントローラのコードを投稿してください。ただの言い換えに従うのは非常に難しいです。 –

+0

user1054152、@ Pavlingの答えを見てください。他の人があなたを誤解させる可能性があります。 –

答えて

1

あなたはいくつかの方法に共通のコードをお持ちの場合は、別のメソッドにそれを抽出します。

def select_users 
    @var = go_get_those_users 
end 

def make_something 
    go_get_those_users.each do |v| Table.create(:atribute => v.name) end 
end 

private 
def go_get_those_users 
    # do whatever you need to populate your collection 
    return [] 
end 

また、「make_something」に投稿されたフォームに選択したユーザーのIDのリストを渡すこともできます。または、あなたがの場合、実際には(私はこれを何らかの形で「何らかの形の多段フォームウィザード」と仮定しています)、セッションではなくユーザーのdbであると仮定します。 DB。各ステップでwizard_idが渡され、独自の値がウィザードに保存されます。これにより、(選択したユーザーの)通常のAR関連がリレーションシップによって確立されます。

+0

最後に、セッションの[]で検索パラメータを保存し、両方の方法でメソッド検索ユーザーを繰り返します。 ありがとうございました! – francordie

2

before_filterを使用できます。アクション定義の前に、つまりクラスの定義の後に以下のコードを追加します。

before_filter :initialize_variable, :only => [:select_users, :make_something] 

これはmethodinitialize_variableと呼ばれるこれらの他のmethodscalledwheneverいずれかであることを確認しますと、それは以下のようにvariableinitializeます。そして変数を直接使うことができます。

def initialize_variable 
    @required_var = // get the details 
end 

USAGES:

def select_users 
    @required_var.each //...... 
end 

def make_something 
    @required_var.each //...... 
end 
+0

お願いします...壊れたコード(セッション中の古くなったオブジェクトはすべての種類の予期しない問題を引き起こすでしょう)で終わるでしょうし、コードの将来の開発者はこのような爆弾を使ってあなたを呪うでしょう – Pavling

+0

これは私たちのコードでやっていることです。 –

+0

これはかなり編集です;-)はい - 変数を投げ捨ててセッションを使用しない方がはるかに良い – Pavling

0

1つのアクションが他のアクションの前に実行されることをどのように保証できますか?

特定のユーザーのデータを保持する場合は、そのデータをモデルに保存します。

おそらく、wizardモデルには、user_idとさまざまなステップのフィールドがあります。

あなたはそれだけでそのセッションに固執し、その後http://railscasts.com/episodes/119-session-based-model

関連する問題