多个型号的评论

2024-03-03

在我的 Rails 应用程序中,我目前设置了评论以与我的帖子模型一起使用,该模型运行正常。如何向我的图书模型添加评论?

这是我到目前为止所拥有的:

以下是我的评论架构中的内容:

 create_table "comments", force: true do |t|
    t.text     "body"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
    t.integer  "post_id"
    t.integer  "book_id"
  end

在我的用户模型中:

class User < ActiveRecord::Base
  has_many :comments
  acts_as_voter
end

在我的帖子模型中:

class Post < ActiveRecord::Base
  has_many :comments
end

在我的书模型中:

class Book < ActiveRecord::Base
  has_many :comments
end

在我的评论模型中:

class Comment < ActiveRecord::Base
  belongs_to :post
  belongs_to :book
  belongs_to :user
  acts_as_votable
end

在我的评论控制器中:

class CommentsController < ApplicationController
  def create
    post.comments.create(new_comment_params) do |comment|
      comment.user = current_user
    end
    respond_to do |format|
    format.html {redirect_to post_path(post)}
    end
  end


  def upvote
  @post = Post.find(params[:post_id])
  @comment = @post.comments.find(params[:id])
  @comment.liked_by current_user

  respond_to do |format|
        format.html {redirect_to @post}
    end
end


  private

  def new_comment_params
    params.require(:comment).permit(:body)
  end

  def post
    @post = Post.find(params[:post_id])
  end

end

在我的路线文件中:

resources :posts do
    resources :comments do
    member do
      put "like", to: "comments#upvote"
    end
  end
  end

在我看来:

<% @post.comments.each do |comment| %>
  <%= comment.body  %>

  <% if user_signed_in? && (current_user != comment.user) && !(current_user.voted_for? comment) %>

<%= link_to “up vote”, like_post_comment_path(@post, comment), method: :put %>

<%= comment.votes.size %>

<% else %>

<%= comment.votes.size  %></a>

<% end %>
<% end %>


<br />


<%= form_for([@post, @post.comments.build]) do |f| %>

  <p><%= f.text_area :body, :cols => "80", :rows => "10" %></p>

  <p><%= f.submit “comment” %></p>

<% end %>

我应该向我的评论控制器添加什么才能让评论在帖子和书籍上起作用?我应该在我的路线文件中添加什么?

预先感谢您的任何帮助。


您不想指定可以容纳的每种类型的对象Comment对象。这会让人头疼if-elsif-else到处都是街区。相反,你希望事情变成这样Commentable,他们都会有.comments在他们。

这被称为多态关联 http://guides.rubyonrails.org/association_basics.html#polymorphic-associations在活动记录中。所以你的模型应该是这样的:

class Comment < ActiveRecord::Base
  belongs_to :commentable, polymorphic: true
end

class Post < ActiveRecord::Base
  has_many :comments, as: :commentable
end

class Book < ActiveRecord::Base
  has_many :comments, as: :commentable
end

并相应地修改您的数据库,这一切都在链接的文章中。现在当你构建一个Comment表单对象,它将预先填充一个commentable_id and commentable_type,您可以将其扔到隐藏字段中。现在什么都不重要了Comment与相关联,你总是以同样的方式对待它。

我会离开User作为一个单独的协会,因为它实际上并不是同一个想法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个型号的评论 的相关文章

随机推荐

  • MongoDB Atlas 和适用于 AWS 的 MongoDB Atlas 有什么区别

    在调查物联网数据存储的兼容数据库期间 我研究了 MongoDB 发现定价有点令人困惑 只是想知道有什么区别MongoDB 阿特拉斯 https www mongodb com cloud atlas pricing and 适用于 AWS
  • 提供大型 CSS 文件

    我有一个大约 50k 的大型压缩 CSS 文件 大约有 30 个页面引用了该文件 将 CSS 分离到一个基本文件中 每个页面都有单独的 CSS 文件会显着减少加载时间 还是提供一个大文件实际上是相同的 谢谢 我不完全确定你的意思 但是提供一
  • iOS 中的裁剪区域与选定区域不同?

    这是github上的链接https github com spennyf cropVid tree master https github com spennyf cropVid tree master您自己尝试一下 看看我在说什么 测试需
  • 连续改变 UISlider 拇指图像上 UILabel 的值

    我有一个UISlider 最少 1 个 最多 10 个 我希望它的拇指有一个UILabel放置在它的顶部 在移动时不断更新和更改其文本UISlider的拇指 所以 我从UISlider并添加了一个UILabel但一旦拇指移动 标签似乎会覆盖
  • Cuda C++ 设备代码中没有元组吗?

    global void addKernel int c const int a const int b int i threadIdx x auto lamb int x return x 1 Works auto t std make t
  • Keras 中 Conv1d 中的 input_shape 变量如何工作?

    再见 我正在 Keras 上使用 CNN 1d 但我在输入形状变量方面遇到了很多麻烦 我有一个包含 100 个时间步长和 5 个带有布尔标签的特征的时间序列 我想训练一个使用长度为 10 的滑动窗口的 CNN 1d 这是我编写的非常简单的代
  • 如何将按组绘图元素叠加到 ggplot2 方面?

    我的问题与分面有关 在下面的示例代码中 我查看了一些分面散点图 然后尝试在每个方面覆盖信息 在本例中为平均线 tl dr 版本是我的尝试失败了 要么我添加的平均线计算所有数据 不尊重方面变量 要么我尝试编写一个公式 但 R 抛出错误 然后是
  • 传递带有自定义数据属性的函数

    是否可以传递具有自定义数据属性的函数 这不起作用 div div function hello console log hello 当我获得该属性时 它是一个值为 hello 的字符串而不是函数 怎么解决这个问题呢 你可以这样做 div d
  • 是否可以在 git-extensions 中为特定文件扩展名设置 diff/merge-tool ?

    我刚刚开始使用 LabView 进行开发 这对我来说是全新的 我想使用 git 扩展来处理我的版本控制 由于源位于 vi格式 我无法使用普通的 diff 工具 源是二进制的 幸运的是 LabView 附带了专用的差异和合并工具 这似乎非常有
  • 关于真实的表示可以假设什么?

    该程序返回0在我的机器上 include
  • HTML 数据在 Android 中从 json webservice 获取的 Webview 中无法正确显示?

    我正在使用 json webservice 从服务器获取 HTML 数据并在 webview 中显示 在 iPhone 中可以完美显示屏幕尺寸 但在 Android 中则不能完美显示 这里我放下了webservice链接和代码以及andro
  • Gemfile.lock 应该包含在 .gitignore 中吗?

    我对捆绑器及其生成的文件有点陌生 我有一份来自 GitHub 的 git 存储库副本 该存储库由很多人贡献 因此我惊讶地发现捆绑程序创建了一个存储库中不存在且不在 gitignore list 因为我已经分叉了它 所以我知道将它添加到存储库
  • Javascript 书签在 Firefox 41 中停止工作

    在 Firefox 41 中 小书签 带有javascript 网址 例如javascript alert it works 从点击或关键字运行 停止工作 有没有什么解决办法可以使用javascript Firefox 41 中的书签 以前
  • OpenID Connect 使用 Office 365 和 spring security 登录

    我需要配置OpenID 连接用一个春季安全过滤器以授权使用我的 Rest API Web 我找到了一个谷歌登录示例 http www baeldung com spring security openid connect 但就我而言 我需要
  • 如何删除两个单词之间的字符串

    我正在使用下面的代码行下载网页 WebRequest request WebRequest Create strURL WebResponse response request GetResponse Stream data respons
  • 根据先前的下拉列表选择显示第二个下拉列表

    首先 我讨厌提出一个已经处理过的问题 但你应该知道我在这个网站上找到的其他选项对我不起作用 基本上 我想构建一个简短的表单 其中有两个下拉框 第一个始终显示 第二个默认隐藏 当选择第一个下拉框中的某个选项时 我希望显示第二个下拉框 这是我的
  • 黑莓开发上的脚本语言?

    据我所知 开发 Blackberry 应用程序的首选方法是 Java 这是吗only way 我梦想有一个快速的应用程序环境 您可以在其中创建 GUI 使用 Blackberry UI 组件 类似于 Blackberry 上的 Tcl Tk
  • 循环遍历矩阵的对角线+1

    我需要循环遍历对角线 1 即对角线右侧的值 1 列 并将值写入数据帧中的列 write csv data frame matrix 1 2 matrix 2 3 matrix 3 4 如何使用函数来做到这一点 而不是仅仅列出值的所有位置 实
  • 使用 C# 从 azure 文件存储递归获取文件

    我想编写一个程序来从天蓝色文件存储中获取文件 但问题是目录深度未定义并且isFile文件的属性始终返回 false using System using System Collections Generic using System Lin
  • 多个型号的评论

    在我的 Rails 应用程序中 我目前设置了评论以与我的帖子模型一起使用 该模型运行正常 如何向我的图书模型添加评论 这是我到目前为止所拥有的 以下是我的评论架构中的内容 create table comments force true d