【问题标题】:Rails - showing comments in a different areaRails - 在不同区域显示评论
【发布时间】:2013-04-08 04:01:28
【问题描述】:

我正在尝试创建一个系统,允许运动员响应他们的教练训练计划,为此我允许教练创建内容,但是我正在使用基于博客的系统来创建它......目前页面像这样显示

内容标题

内容信息 1...

内容信息 2...

内容信息 3...

评论...

评论 1

评论2

评论 3

.etc

但是我想设置它,以便每个帖子最多只能有 7 条评论,并且每个帖子都像这样设置......

内容标题

内容信息 1...

评论 1

内容信息 2...

评论2

内容信息 3...

评论 3

.etc

我意识到这可能不是实现我想要的最佳方式,但它确实有效(只是不会出现在我想要的地方) 我确实进行了创建更多模型的实验,但每当我尝试在每个帖子中运行超过 1 个评论系统时,都会不断出错。我想知道我是否可以帮助解决这个问题,或者我可以采取什么方法来使这更容易,或者如果模型可以工作并且我只是做错了什么,甚至更好?告诉我这是否还不足以提供足够的信息,我会尝试提供更多信息!谢谢你

.

.

编辑:

我使用的模型是 计划 - 与本周的训练计划一样 教练 - 向骑手输入数据的教练 车手 - 用他们自己的数据评论教练数据。

我不确定到底需要什么文件,所以我已经包含了我要推送到的 github 页面的链接 (https://github.com/effectonedesign/coacheasy1),如果需要任何其他信息,请告诉我!

我喜欢“头脑”所说的话,但是,我已经完成了所说的一切,在我的 def 显示(程序控制器)中它说有一个错误,我不断收到这条消息 undefined method `coaches' for nil:NilClass一切都与他的相同,但我遇到了问题,我真的很感谢你的帮助!谢谢

【问题讨论】:

  • 请添加您的模型(主要是内容和评论)并尝试添加您使用的模板
  • 在您的 Coach 模型中,belongs_to :programs 应该是 belongs_to :program。您应该在 StackOverflow 上的问题中发布您的代码,而不是链接到它。所以一个好的起点是你得到错误的地方——发布你得到错误的相关视图和控制器操作。

标签: ruby-on-rails ruby ruby-on-rails-3 models posts


【解决方案1】:

我可能会为上述创建 3 个模型,TrainingPlanSection(或 content、text_block 等)和 Comment

然后执行以下操作

  • TrainingPlan has_many :sections
  • Section belongs_to :training_plan
  • Section has_one :comment(如果每个部分只允许 1 条评论,否则使用 has_many)
  • 评论belongs_to :section

现在,要实现您想要的格式,请在您的视图中执行以下操作:

<% @training_plan.sections.each do |section| %>
  <%= section.text %>
  <%= section.comment.text %>
<% end %>

如果您允许多个 cmets:

<% @training_plan.sections.each do |section| %>
  <%= section.text %>
  <% section.comments.each do |comment| %>
    <%= comment.text %>
  <% end %>
<% end %>

cmets 表格

我没有测试以下内容,因此您可能需要调整一些部分。
训练计划控制器:

def show
  # using includes will query the database 3 times only (once for each table) rather than
  # querying it 1 + N + N (in this case 7 sections, 7 comments possibly, so 15 times)
  @training_plan = TrainingPlan.includes(:sections, sections: :comment).find(params[:id])
  @sections = @training_plan.sections
  @sections.each do |section|
    # only build a new comment if there is no comment for that section already
    section.build_comment unless section.comment
  end
end

在你看来views/training_plans/show.html.erb

<%= @training_plan.title %> # or whatever
<% @sections.each do |section|
  <%= @section.content %>
  <% if section.comment %>
    <%= section.comment.content %>
  <% else %>
    <%= render 'comments/form', comment: section.comment %> # or wherever you have the form
  <% end %>
<% end %>

views/cmets/_form.html.erb

# This might break if you have a separate comment action somewhere which passes an
# instance variable @comment to the form
<%= form_for comment do |f| %>
  # normal form stuff
<% end %>

如果一切正常,那么在您的培训计划显示页面上,您应该会看到每个部分,如果有评论,则将呈现该评论,否则将显示一个表单。

根据您的路线,您可能需要运行 rake routes 并查看您的评论创建操作在哪里,然后将其传递给表单 &lt;%= form for comment, url: some_url_helper_here do |comment| %&gt;

如果是我,我会通过 JavaScript 创建添加评论部分,有点像 this railscast,但由于您是 RoR 的新手,所以我尽量保持简单。

【讨论】:

  • 感谢您的回复,有什么方法可以私信您以获取更多信息/帮助,我仍然很困惑(RoR 新手)!我真的很感激!谢谢!!
  • Mind.blank,我将如何拥有它以便它还为每个评论部分创建一个新评论:)?谢谢
  • 谢谢,仍然有一些问题...我的模型是(你的 vs 我的)你的 - TrainingPlan vs 我的 - 程序你的 - 部分 vs 我的 - 教练你的 - 评论 vs 我的- 骑手我已经完成了你上面所说的一切,在我的 def show(程序控制器)中说有一个错误,我不断收到这个消息 undefined method `coaches'对于 nil:NilClass 一切都与你的相同,但我遇到了问题,我真的很感谢你的帮助!
猜你喜欢
  • 2011-02-27
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2015-03-23
  • 2011-04-09
相关资源
最近更新 更多