answers_controller:
@questions = Question.order("qtype, position")
@ans = Answer.where(user_id = current_user.id)
@answers = @questions.map { |q| [q, @ans.find_by_question_id(q.id)] }
视图:
<%= form_for @answers, :remote => true do |form| %>
错误是因为@answers被映射了吗?任何帮助表示赞赏。
更新:
答案模型:
belongs_to :user
belongs_to :question
用户模型:
has_many :answers
问题模型:
has_many :answers
更新2: 我将以下内容复制并粘贴到控制器中。
@answers = current_user.answers.questions
我得到了以下内容:
undefined method `questions' for #<Class:0x1032d6d98>
我尝试采用第二种方法 - 用户模型:
has_many :answers, :through => :answers
控制器:
@questions = current_user.questions
得到了:
undefined method `questions' for #<User:0x103569ec0>
app/controllers/answers_controller.rb:18:in `index'
答案 0 :(得分:2)
是的,这就是原因。你可能想做: current_user.answers.questions
如果您根据需要设置了关联,那么将完全返回您想要的内容(通过在幕后使用连接)
更新
现在,通过查看你的联想,我不确定,你想要完成什么。 @answers = current_user.answers不会返回所有答案,然后在视图中您可以使用答案和相应的问题(并仍然使用form_for @answers)。 但是,如果你想要@questions,你可以这样做:
首先,将用户与问题相关联
class User
has_many :questions, :through => :answers
end
你的控制器:
@questions = current_user.questions
希望它有所帮助。
答案 1 :(得分:1)
@answers = @questions.map { |q| [q, @ans.find_by_question_id(q.id)] }
这将为您提供一个数组数组,这些数组又包含问题和所有问题答案的另一个数组。像这样:
[[q1, [q1_answer1, q1_answer2]], [q2, [q2_answer1, q2_answer2,...]], ...]
因此,每个答案都在一个数组中,该数组本身在@answers内部为2级。
至于你引用current_user.answers时的问题,你会得到一系列答案。
关联是针对类的实例,而不是它们的集合。也就是说,您可以调用answer.question来获取与给定答案相关的问题。但是,您不能像上面那样只调用answers.questions,因为a)答案是数组,而不是答案实例,b)关联是'问题',而不是'问题'
如果您尝试获取所有答案的所有问题,则需要对每个答案进行某种操作,例如:
questions = current_user.answers.map{|answer| answer.question}
将每个答案的每个问题映射到一个数组中。请注意,如果用户对问题有多个答案,则该问题将多次出现在数组中。它可以用'uniq'方法重复删除。
答案 2 :(得分:1)
如果我理解正确,您希望列出所有答案,但顺序与您的问题相同。
我假设您的模型看起来像
class User
has_many :questions, :through => :answers
has_many :answers
end
class Question
has_many :answers
has_many :users, :through => :answers
end
class Answer
belongs_to :user
belongs_to :question
end
获取current_user
的问题应该成为:
@questions = current_user.questions.order("qtype, position")
获得相应的答案然后变为
@answers = @questions.map{|q| q.answer}
希望这有帮助。