0

要求:
我正在为本地校园创建一个类似 twitter 的 Web 应用程序,用户可以像 twitter 一样在 140 个字符内通过服务分享他们的反馈。

对于每个反馈,可以对反馈有多个响应。这些回复类似于 twitter 回复,其中回复也是 140 个字符的回复,如推文。

本质上,用于输入反馈或响应的屏幕与相同的功能元素相同。
示例是:-

这是一个演示反馈 - 用户 1
  这是对反馈的回应 - 用户 2


我正在使用 Rails 进行开发,这就是我的反馈模型的样子

class Feedback < ActiveRecord::Base
  attr_accessible :title     

end

我在数据库中的表结构如下所示:-
反馈表

id , integer , 主键
标题, varchar (255)

这就是我想要管理对反馈的响应的方式

一个名为“ Feedback_Responses ”的单独表格,其结构如下:

feedback_id (int) [这是父反馈id]
response_id (int) [这是对父反馈id的响应]

我的问题 我知道这里需要具有多对一关系的自引用映射。但是,我不清楚如何从用于创建反馈的同一视图继续创建响应。其次,响应是对系统的另一个反馈,因此除非创建响应并生成其 id,否则 Feedback_Responses 表不会填充所需的映射。所以,在这种情况下,我真的一无所知,也许对如何在单独的表上创建响应和管理它们的映射感到困惑。我开始使用这个应用程序学习 Rails。

4

2 回答 2

0
class Feedback < ActiveRecord::Base
  attr_accessible :title 
  validates :title, :length => { :maximum => 140 }
  has_many_and_belong_to :responses   
end

class Response < ActiveRecord::Base
  has_many_and_belong_to :feedbacks      
end

要从反馈对象中获取响应,请使用@feedback.responses 相同的响应对象@response.feedbacks 这种关系很容易维护。如果需要,您可以添加中间表。

于 2013-01-25T07:30:04.990 回答
0

我不太了解您的设计,但看起来您的主要实体(相当于推文)是“反馈”,每个“反馈”可以有许多“响应”(如评论)。我不清楚的是“响应”本身是否可以是“反馈”,但我现在假设它不是。因此,根据此描述,您的设计表明反馈有很多响应。我发现“feedback_responses”表与此事无关,因为听起来响应与一个且只有一个反馈有关。所以,放下桌子。

所以,我会这样写:

# table feedbacks
# id: Integer
# title: Varchar 140
class Feedback < ActiveRecord::Base
  has_many :responses
end

# table responses
# id: Integer
# feedback_id: Integer
class Response < ActiveRecord::Base
  belongs_to :feedback
end

尽管如此,如果你想处理一个反馈而不是对另一个反馈的响应,你可以使用继承作为解决方案:

# additionally feedback_id: Integer to the feebacks table
class Feedback < ActiveRecord::Base
  has_many :responses
end

class Response < Feedback
  belongs_to :feedback
end

只要您有两个可区分的模型,视图生成就会自动变得容易。

于 2013-01-25T08:43:01.567 回答