2011-11-09 3 views
0

私はアンケートアプリケーション用のレポートを作成するモデルメソッドを持っています。表の各列は異なる質問を表し、各行はインタビュー対象者です。これは、column_namesメソッドを使用して質問idの配列を作成し、関連する応答を追加します。変数を使用してcolumn_namesをループする

def self.import_answers(params) 

@members = Member.where(:questionnaire_id => params[:questionnaire]) 
@columns = Report.column_names 
@members.each do |member| 
    @report = Report.find_by_membership_number(member.membership_number) 
    @responses = Response.where(:member_id => member.id) 
    @columns.each do |column| 
    question = column.to_s.gsub("q", "").to_i 
    @response = @responses.where(:question_id => question).first 
    unless @response.nil? 
     @report.column = @response.response_id 
     @report.save 
    end 
    end 
end 

エンド

この方法では、ラインの@ report.columnで壊れます。

私はこれが

@report."q1" 

などのようなラインの@ report.column反復することを意味します...

["q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9", "q10"] 

COLUMN_NAMES方法はそうと同じように、文字列の配列を返すため、それができると思いますこれに反対する...

私はそれについて間違っている可能性があります!しかしどちらの方法でも、私はそれをどのように働かせることができるか把握するのには苦労しています。

+0

:今、あなたのコードのように書くことができ

class Report < ActiveRecord::Base # extract the question id from the column def self.column_question_id(name) name[1..-1].to_i end end 

。また、発生する正確なエラーを追加できますか?それが壊れているという報告はあまりにもあいまいです。あなたはどんな結果を期待していますか?あなたは '@ report'が質問と回答の配列を含むインタビュー対象者の配列になると期待していますか? – sorens

+0

レポートテーブルは、各メンバーの行を作成します。 @reportはテーブル内の行(メンバ)を参照します。私は完全な方法を示すために私の質問を更新しました。 – tob88

答えて

1

send("#{atr}=")を使用すると、属性を動的に設定できます。あなたのコードを見直した後、update_attributeを使用するほうが、setsave操作を1回の呼び出しで実行する方が良い場合があります。

また、id抽出ロジックがモデル外にあることに気付きました。レポートモデルにカプセル化する方がよい場合があります。 `@のreport`が定義されている場所が表示されません

Report.column_names do |column| 
    @response = @responses.find_by_question_id(Report.column_question_id(column)) 
    @report.update_attribute(column, @response.response_id) if @response.present? 
end 
+0

はい!これは完全に機能しています。 update_attributeのスペルには余分なTが必要でしたが、私はそれをあなたに向かって持ちません。感謝のヒープ、ティック! – tob88

0
@report.send(column.to_sym) = @response.response_id 
0

@report.send("#{column}=".to_sym, @response.response_id)

あなたはより多くの情報hereを得ることができます。

関連する問題