路由关注和多态模型:如何共享控制器和视图?

2023-12-31

给定路线:

Example::Application.routes.draw do
  concern :commentable do
    resources :comments
  end

  resources :articles, concerns: :commentable

  resources :forums do
    resources :forum_topics, concerns: :commentable
  end
end

和模型:

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

当我编辑或添加评论时,我需要返回到“可评论”对象。不过,我有以下问题:

1) The redirect_to in the comments_controller.rb根据父对象的不同会有所不同

2)视图上的引用也会有所不同

= simple_form_for comment do |form|

有没有一种实用的方法来共享视图和控制器comment资源?


在 Rails 4 中,您可以将选项传递给关注点。所以如果你这样做:

# routes.rb
concern :commentable do |options|
  resources :comments, options
end


resources :articles do
  concerns :commentable, commentable_type: 'Article'
end

然后当你rake routes,你会看到你得到了一条类似的路线

POST /articles/:id/comments, {commentable_type: 'Article'}

这将覆盖请求尝试设置的任何内容以确保其安全。然后在你的 CommentsController 中:

# comments_controller.rb
class CommentsController < ApplicationController

  before_filter :set_commentable, only: [:index, :create]

  def create
    @comment = Comment.create!(commentable: @commentable)
    respond_with @comment
  end

  private
  def set_commentable
    commentable_id = params["#{params[:commentable_type].underscore}_id"]
    @commentable = params[:commentable_type].constantize.find(commentable_id)
  end

end

使用 rspec 测试此类控制器的一种方法是:

require 'rails_helper'

describe CommentsController do

  let(:article) { create(:article) }

  [:article].each do |commentable|

    it "creates comments for #{commentable.to_s.pluralize} " do
      obj = send(commentable)
      options = {}
      options["#{commentable.to_s}_id"] = obj.id
      options["commentable_type".to_sym] = commentable.to_s.camelize
      options[:comment] = attributes_for(:comment)
      post :create, options
      expect(obj.comments).to eq [Comment.all.last]
    end

  end

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

路由关注和多态模型:如何共享控制器和视图? 的相关文章

  • 在 Rails 4 中使用 Strong Params 允许特殊情况下使用额外的参数

    因此 对于一个组织来说 我希望用户能够编辑有关它的一些内容 params require organization permit name location 但在特殊情况下 我希望管理员能够编辑额外的属性 params require or
  • 更改 en.yml 文件中的属性名称不起作用

    我更改了 ruby on Rails 项目中 en yml 文件中的属性名称 按钮工作正常 但字段属性并没有改变 这是我的模型 class Enr AffordableWarmth lt ActiveRecord Base self tab
  • 表情符号未正确保存在 mongodb 中

    我正在将 Twitter 和 Instagram 上的表情符号保存到我的 mongodb 数据库中 但是当我显示从数据库中提取的数据时 表情符号看起来像这样破损了 在将数据保存到 mongodb 期间我需要做一些不同的事情吗 我是 mong
  • 如何使用 form_for 将参数传递给控制器​​ ruby​​ on Rails

    我有一个用户模型和一个课程模型 用户登录后可以自己上传课程 但是 我希望管理员能够为用户上传 以防用户不够精明 我的想法是对用户上传和管理员上传使用相同的创建操作 并使用 if 语句 管理员将在用户 id视图页面中为他上传之前选择用户 然后
  • Rails 中对多个域/子域的支持

    我有一个 Rails 应用程序 它的设置与 Tumblr 类似 也就是说 您可以选择 1 子域名托管 your username myapp com 2 域名托管 your username com 两者都会转发到使用我的应用程序创建的该用
  • Rails 中 WHERE 子句中的 ALL 运算符

    关联关系如下图所示 InstructorStudent has many fees Fee belongs to instructor student 我想要获得在所有给定数组中具有每月详细信息的指导学生 如果其中任何一个中不存在每月详细信
  • heroku 上的 bitbucket 私有存储库

    我有一个需要 gem 的 Rails 应用程序 我将这个 gem 托管在私有存储库的 bitbucket 上 在我的 Gemfile 中 我添加了 gem 如下所示 gem my gem git gt gi email protected
  • rake cucumber 和 rake spec 始终使用“开发”环境

    我运行 Cucumber 和 RSpec 测试的 rake 任务始终使用我的development环境 以下是相关的配置文件 RAILS ROOT config environments cucumber rb Edit at your o
  • 使用 Paperclip 保存文件而不上传

    我有一个简短的问题 是否可以保存文件而不实际通过表单上传 例如 假设我正在查看电子邮件中的附件 并且我想使用回形针保存它们 我该怎么做呢 我是否必须在某处手动调用 save file 或类似的东西 任何帮助将非常感激 我有一个 rake 任
  • Rails 3.2 子域和设计

    我有一个应用程序 用户可以登录到他们的公司子域 我用的是设计 此代码将用户从根域重定向到子域 def after sign in path for resource or scope scope Devise Mapping find sc
  • 通过纱线安装 bootstrap 的 Rails 找不到字体

    我有一个带 Bootstrap 的 Rails 5 应用程序 我用纱线安装了它 我做了以下事情 yarn add bootstrap bootstrap 3 3 7 version 3 3 7 resolved https registry
  • 更新系统后RubyGems错误

    使用 sudo gem update system 更新 ruby 设置后尝试启动 Rails 控制台时 我尝试通过发出以下命令来执行 Rails 控制台rails c 我收到此错误 Users myusername rvm rubies
  • Ruby:创建日期范围

    我正在寻找一种优雅的方式来制作一系列日期时间 例如 def DateRange start time end time period end gt gt results DateRange DateTime new 2013 10 10 1
  • 使用 Paperclip 和 Multipart 请求将文件上传到 Rails JSON API 服务器

    我想将文件从 Android 客户端上传到 Rails JSON API 服务器 我正在从 Android 客户端发送一个 Multipart form 请求 如下所示 Content Type multipart form data bo
  • Rails 中的“class << self”是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 Ruby 中的 class https stackoverflow com questions 2505067 class self idiom in ruby有人可以向我解释一下 class htt
  • 如何验证单选按钮?

    我的 Rails 应用程序中有一个单选按钮 我想编写一个 java 脚本代码 在未选择任何选项时验证这一点 在你的 votes 类中做类似的事情 class Myvotes lt ActiveRecord Base validates vo
  • jRails 是 Rails + jQuery 必须的吗?

    我是rails新手 使用rails 2 3 10 并且想使用jquery 特别是jquery ui 该项目是一个全新的项目 我计划使用 jquery ui 中的一些小部件 如 datapicker 和 selectable 等 我听说可以安
  • factory_girl + rspec 似乎并没有在每个示例后回滚更改

    类似于这里描述的问题 http rpheath com posts 411 how to use factory girl with rspec http rpheath com posts 411 how to use factory g
  • Production.log 中没有日志消息

    我编写了一个演示 HelloWorld Rails 应用程序并使用 WEBrick 对其进行了测试 它甚至不使用数据库 它只是一个打印 hello world 的控制器 然后我尝试将其部署到由 Passenger 驱动的本地 Apache
  • 如何从另一个 .rb 文件访问模块内和类内的 Ruby 方法

    我想知道如何从另一个 rb 文件访问此模块中的方法 module Decisioning module Decision class OfferProxy lt FinanceApplication Offer def my method

随机推荐

  • 无法让 jquery.jqgrid 4.4.1 在 ASP.NET MVC 中工作

    我一直在努力让 jquery jqgrid 4 4 1 在我的 ASP NET MVC 4 解决方案中工作 我使用 NuGet 将 jquery jqgrid 4 4 1 安装到我的项目中 我试图在我的页面中插入一个非常简单的网格 只是为了
  • 如果我写了 system.out.println(); 则找不到包系统;

    我正在写一个简单的程序 class Demo public static void main String args system out println Hello 编译时它给出了error package system not foun
  • 如何将 xarray 数据集展平为一维 numpy 数组?

    有没有一种简单的方法可以将 xarray 数据集展平为单个一维 numpy 数组 例如 展平以下测试数据集 xr Dataset a xr DataArray data 10 11 12 13 14 coords x 0 1 2 3 4 d
  • 将 scipy 稀疏 csr 转换为 pandas?

    我已经用过 sklearn preprocessing OneHotEncoder 转换一些数据的输出是scipy sparse csr csr matrix如何将它与其他列一起合并回原始数据框 我尝试使用pd concat但我得到 Typ
  • 在 Octave 中读取 CSV 时出现问题

    我有一个 csv 文件 但无法在 Octave 上读取它 在 R 上 我只需使用下面的命令 一切都可以正常读取 myData lt read csv myData csv stringsAsFactors FALSE 但是 当我转到 Oct
  • 使用 angularjs 添加新元素到 DOM 中并不会启动它

    进一步解释 我正在使用 angular summernote 并使用指令在 DOM 内插入新的所见即所得编辑器实例 然而 当我将它插入到 DOM 中时 新编辑器不会加载 可能是因为 init 已经被触发了 这是我正在使用的指令 以及有效的
  • 在Mac中使用shell命令递归更改文件和文件夹的权限

    在Linux中 我们可以使用以下命令递归地更改文件和文件夹的权限模式 找到 Users Test Desktop PATH exec chmod 777 我怎样才能对 mac 做同样的事情 因为我反复收到以下错误 查找 TEST FILE
  • 使用 Ruby 中的 Selenium WebDriver 将 IE9 更改为 IE8

    我正在将 Selenium WebDriver 与 Ruby 结合使用 并尝试创建一个在 IE8 中测试的脚本 我无法找到有关如何设置 iedriver 以 IE8 模式启动或如何在 webdriver 启动后将其切换到 IE8 的答案 我
  • Ninject:实体对象无法被 IEntityChangeTracker 的多个实例引用

    我开始在我的 MVC5 代码优先应用程序中使用 Ninject 这是我的 NinjectWebCommon cs private static IKernel CreateKernel var kernel new StandardKern
  • 如何用假参数初始化 glut?

    我正在使用 opengl 使用 GLUT 和 GLEW 库为特定应用程序创建插件 该插件不是以简单的 int main argc argv 开头 所以我无法将这些值传递给 glutInit 我尝试过这样的事情 glutInit 0 NULL
  • 用于获取仅包含任何日期时间中的月份和年份的日期时间的 T-SQL 代码

    给定一个表Event包含一个名为EventTime类型为 DateTime 并且该值将包含日期和时间元素 我需要创建一个汇总查询来计算每个月的事件数 分组依据字段的结果类型还必须是带有 0 时间元素的日期时间 并设置为该月的第一天 这是我到
  • Windows 资源管理器中文件夹的“修改日期”规则

    Windows 资源管理器如何确定文件夹的 修改日期 字段 旁白 我知道这是从特定于浏览器的角度提出的问题 但该行为可能对编码搜索 排序类型活动有用 是否有对此的明确描述 Microsoft MSDN Google 和 Stack Over
  • 函数参数的部分绑定

    有没有办法部分地绑定第一个 最后一个n可调用对象 例如函数 的参数而不显式指定其余参数 std bind 似乎需要这样all参数是绑定的 那些剩下的应该绑定到std placeholders 1 2 3 etc 是否可以写一个bind fi
  • Numpy 多维数组中索引的顺序

    例如 假设我正在模拟一堆粒子随着时间的推移做某事 并且我有一个名为的多维数组particles与这些索引 粒子的 x y z 坐标 长度a 即3对于 3d 空间 单个粒子的索引 长度b 其所在时间步长的索引 长度c 构建数组是否更好part
  • Ajax.BeginForm 让我抓狂

    ASP NET MVC3 我有一个最初在 div 内呈现的部分视图 以下是部分代码 model Venue Models Validation CustomerRequestModel Scripts jquery 1 4 4 min js
  • 如何使用 Jmeter Correlation 从下拉列表中选择随机帐户

    我在正则表达式的帮助下使用关联设计了我的脚本 这里我的场景是登录 进入产品搜索屏幕 随机选择一个帐户并选择产品模板并下订单 在这里 我通过为每个组选择提供的帐户来完成关联并为 5 个用户运行脚本 但我想为每个用户选择不同的帐户 第一次登录时
  • 如何为 H2OFrame 对象一次强制多个列为因子?

    我正在尝试遵循有关问题的建议 同时将多个列强制为因子 https stackoverflow com questions 33180058 coerce multiple columns to factors at once 但它不适用于H
  • WPF中如何发现ScrollViewer滚动到最后?

    我有一个ScrollViewer我的自定义控件中的实例 我需要 scorollview 是否滚动到末尾的要求 有什么办法吗 您可以通过以下方式检查 scrollViewer ScrollChanged OnScrollChanged pri
  • 在加载上下文中加载非托管静态 dll

    我有本机非托管 dll 它是静态的 如果我想并行运行它 每次需要库做一些工作时都必须加载它 在 NET 中 我会使用 AppDomain 并在需要时加载此 dll 但在 NET Core 中 AppDomain 已经消失 暂时 我查看了 A
  • 路由关注和多态模型:如何共享控制器和视图?

    给定路线 Example Application routes draw do concern commentable do resources comments end resources articles concerns commen