2016-09-27 18 views
0

私はここにレールプロジェクトを持っています。コントローラでは、 single_outputと定義されており、URLが/single_output/1の場合は、person_id=1という情報が表示され、別のメソッドgroup_outputを同じコントローラに追加しますが、single_outputを呼び出す必要があります。基本的に私がしたいのは、URLが/group_output/1のようなものであれば、それは私にperson_idを含むgroup_id=1の情報を与え、これらのperson_idは私にすべての情報を与えます。rails:同じコントローラ内で別のメソッドを呼び出しながら新しいメソッドを定義する

コントローラー:

def single_output 
    person_id = param[:person.id] 
    result = Person.where(:person_id => person_id) 
end 

def group_output 
    group_id = params[:group_id] 
    person_ids = Group.where(:group_id => group_id) 
    person_ids.each do |person_id| 
     output = get '/single_output/' + person_id 
    end 
end 

ルート:

私のソリューションはこれです

match "School/single_output/:person_id(.:format)" => "School#single_output" 
match "School/group_output/:group_id(.:format)" => "School#group_output" 

しかしget方法がこれを行うには良い方法ではありませんように思えます。

または私は別のアイデアを思い付く:

redirect_to '/single_output/' + person_id 

しかし、それはこれを行うにはRender and/or redirect were called multiple times in this action.

答えて

1

通常の方法は、別の方法を使用することであることを示しています。

def single_output 
    get_person(params[:person_id]) 
end 

def group_output 
    group_id = params[:group_id] 
    person_ids = Group.where(:group_id => group_id) 
    person_ids.each do |person_id| 
     output = get_person(person_id) 
    end 
end 

private 

def get_person(id) 
    Person.where(person_id: id) 
end 

しかし、あなたのコードは、私がGroupオブジェクトの配列になりgroup_outputperson_idsを期待...珍しいです。グループオブジェクトhas_many人ですか?配列や最初に一致するGroupオブジェクトが必要ですか? ...場合あなただけ行う必要があるだろうに

def single_output 
    get_person(params[:person_id]) 
end 

def group_output 
    @group = Group.find_by(group_id: params[:group_id]) 
end 

private 

def get_person(id) 
    Person.find_by(person_id: id) 
end 

そして、あなたの出力であなただけのグループに属するすべての人になりた@group.peopleを反復処理します表示します。

とグループのレコードがある場合は、このバージョンでは、例外が発生しますが、最終的には、レールの大会は、レコードIDがちょうどidないrecord_idと呼ばれているということですので、標準のレールのアプリで、私はそれが@group = Group.find_by(id: params[:group_id])あるいは@group = Group.find(params[:group_id])ことを期待したいです見つかりません。

関連する問題