has_many:通过,但有时只是?

时间:2015-03-18 20:49:59

标签: ruby-on-rails ruby ruby-on-rails-4 associations

我的应用包含许多Users,其中每个User都有很多Questions

为什么我需要这样做

现在,我们希望能够将一些Messages挖掘到Questions。这很复杂,因为并非所有Messages都属于Question。这是一个例子:

- = Not (really) a question
x = Belongs to question x
y = Belongs to question y

[-] Hey
[-] Hey, what's up?
[x] Not much. Hey, what's a good movie to see tonight?
[x] How about Star Wars?
[x] Great idea! Thanks.
[-] You bet.
[-] Star wars is awesome.
[-] Yeah it is.
[-] Hey I have another question
[-] Shoot
[y] Where should I go on vacation this summer?
[y] Go to France, it's beautiful.
[y] Yeah, I'll go to France.
[-] Any other questions?
[-] No, but thanks for your help.

需要发生什么

作为最终结果,我希望看到一个消息流并标记出问题的一部分,如上所述。所以做一些像

这样的事情会很好
@messages.each do |message|
  if not message.question.blank?
    ...

我想标记问题的类别(属性Question)。

@message.question.update(category: 3)

我还想查看一个问题并对其应用类别,以便我可以提取类似的内容:

p = @question.category
ul
  @question.messages.each do |message|
    li = message.content

我担心的是,邮件根本不会与问题有关。那么我应该如何构建我的数据?

更新

我忘了提到的另一件事是数据应该最终输出为JSON。

1 个答案:

答案 0 :(得分:1)

基本上你想要做的是在Message中创建一些方法来处理整个if question.present?检查,例如。

class Message < ActiveRecord::Base
  belongs_to :question

  def category
    question.try(:category) || "-"
  end

  # ...
end

那么你可以在你的视图中做这样的事情:

@messages.each do |m|
  = "[#{m.category}] #{m.text}"