Tag: oop

Rails has_many错误 – 无法找到ID

我有一个评论和回复。 评论has_many回复 的routes.rb resources :comments do resources :replies end 当我打开评论/索引然后选择评论/显示我打印有关该评论的所有回复的信息。 我也可以创建另一个回复。 这一切都正常。 当我决定编辑其中一个回复时出现问题。 奇怪的是,如果有一个ID与我想要修改的回复ID相同,则编辑工作正常。 甚至不需要我想修改的特定回复属于该评论。 但是如果我想编辑带有ID的回复,例如66,但是没有id为66的注释,我收到一个错误: Couldn’t find Comment with ‘id’=65 这是回复/ _form.html.erb,它显然也可以作为编辑表单。 在这种情况下,reply.id为65,它正在查找具有相同ID的注释,该注释不存在。

Rails – 如何将.new / .save更改为.create

我有两个模型:Schedule和Project。 项目has_one计划和计划belongs_to项目。 当我创建一个时间表时,我会这样做: def create @schedule = Schedule.new(schedule_params) @schedule.project = Project.find(params[:project_id]) if @schedule.save flash[:notice] = “Successfully created schedule.” redirect_to profile_path(current_user) end end 这很有效。 但是,我添加了一个after_create回调和一个after_update回调来发出通知。 创建计划时创建“新计划”通知,更新计划时“计划已更新”通知。 问题是在控制器中我使用@ schedule.new和@ schedule.save,而不是@ schedule.create。 我需要更改我的控制器代码以使用.create,以便after_create回调可以工作。 我已经尝试过使用after_save回调,但是每当更新计划时都会调用它,这样就无法工作了。 由于我定义@schedule和@ schedule,project的方式,我无法弄清楚如何更改上面的代码以使用@ schedule.create。 有没有人有任何想法? 谢谢。

基于对象类的控制流/条件基础设计是不是很糟糕?

我目前正在开发一个Rails项目,并且已经找到了最容易做到的时间 if object.class == Foo … else if object.class == Bar … else … 我开始在视图中这样做,我需要以不同的方式显示不同的对象,但现在发现自己在其他地方使用它,例如在将对象作为参数的函数中。 我不确定为什么,但我觉得这不是好习惯。 如果这不是好习惯,为什么呢? 如果它完全没问题,那么人们何时可能想要特别使用它? 谢谢!

什么是Ruby on Rails ORM的外行人的术语? 请解释

我在Ruby on Rails中无法理解ORM。 据我所知,表/列和对象/属性之间存在1:1的关系。 所以每条记录都是一个对象。 究竟什么是模型? 我知道它映射到一张桌子。 我真正追求的是对上述内容的更深入理解。 预先感谢您的帮助 我是一名从PHP到Ruby on Rails的Web开发人员。

得墨忒耳定律

我最近在stackoverflow上发布了一个问题,我做了一些有用的事情 @period_registration.period.event 但是,有人建议我做以下事情: def event period.event end @period_registration.event 我的一般意义是,这似乎有点严厉。 查看此前发布的内容如何将Demeter法应用于此? 显示如果你为每个协会做这件事,这会变得多么重。 在铁轨中这种做法有多常见? 我的想法是,即使这在技术上是正确的,但如果它不是铁杆文化的一部分,那么这样做似乎会让人们失望。 而且,更重要的是,实际上使代码不易维护,因为其他开发人员认为你在浪费时间使用所有这些辅助方法。 假设我想表达这个,请@ period_registration.event.city,其中city是事件的属性,而不是单独的对象也违反了LoD,或者我需要编写另一种方法,所以我可以这样做:@ period_registration.city

如何在Rails应用程序中禁用迁移function?

背景 我们分别设计数据库模型和应用程序模型(RDMBS架构师与OOP工程师)。 从我所看到的Rails与域/密钥正常forms相比,Rails迁移不能轻易复制精心设计的企业RDBMS的所有function(如果有的话),因此我们不迁移,而是使用其他工具来构建数据库(没关系对象 – 关系阻抗不匹配的问题)。 对于我们来说,数据完整性和数据库性能对于冒任何开发人员更改RDBMS模型的风险来说太宝贵 题 无论出于何种原因,我们现在都有一个Rails应用程序,它通过迁移破坏了数据库更改。 如何在现有Rails应用程序中干净地禁用此function? 我有我的理论,但我想知道世界的想法。

将CSV写入stdout或文件名

我想创建一个方法,如果给定一些CSV输出写入文件名,如果没有给出,则写入stdout。 似乎我需要根据文件或stdout来区别对待我对CSV调用,但是我真的希望将输出流z视为我可以写入的内容而不是它是否是磁盘上的文件或者stdout流。 这可能吗? 以下是我的尝试和错误: require ‘csv’ require ‘pathname’ require ‘csv’ require ‘pathname’ def write_to_csv_or_stdout foo, bar, z=nil z = Pathname.new(z) if z z ||= $stdout res = [[foo, bar, “baz”]] CSV(z) do |csv| res.each do |row| csv < foo,bar,baz # write_to_csv_or_stdout “foo”, “bar”, “baz” # (NoMethodError)

Ruby – 哈希属性的Setter方法

通过将笔和纸RPG转换为脚本,我一直在使用Ruby。 现在我有一个角色的统计数据保存在哈希中,我希望能够通过公共方法设置。 我得到了这个: class Character attr_reader :str, :con, :dex, :wis, :int, :level, :mods, :stats def initialize str, con, dex, wis, int, cha, level = 1 @stats = { :str => str, :con => con, :dex => dex, :wis => wis, :int => int, :cha => cha } @mods = {} @level = level @stats.each_pair do […]

Ruby OOP tic-tac-toe hash / conditional / itiration

试图在Ruby中创建一个经典的tic tac toe OOP但是我的game_results()方法遇到了麻烦。 我意识到这不是很完整,需要更多的function,但是现在我只是试图用我从用户输入的对象填充我的电路板并输出填充板和赢家。 当我在我的主板上看到我们有一个胜利者时,我呼吁使用game_results()方法并且它给了我正确的赢家,但是每当发生平局游戏时,我都会收到错误。 有人对操作员的错误有什么想法或解决方案吗? 顺便说一下,我知道这一切都很混乱,但我是初学者。 #require “pry” class Game attr_reader :turn def initialize @turn = 1 @board = { a1: ” “, a2: ” “, a3: ” “, b1: ” “, b2: ” “, b3: ” “, c1: ” “, c2: ” “, c3: ” ” } end # def start_game # […]

带有时间戳字段的ActiveResource MassAssignmentSecurity错误

我试图在rails模型上使用ActiveResource实现基本的CRUD操作。 文档说要创建一个ActiveResource::Base的子类,然后设置self.site 。 这很好用直到我尝试更新已经获取的现有记录。 我看到的错误是’ MassAssignmentSecurity::Error ‘,当我在ActiveResource对象上调用’save()’方法时,由于created_at和updated_at字段无法访问,它出现。 我发现如果在我的模型类上使用attr_accessible标记这些字段它可以正常工作,但这似乎是一个非常不安全且非常糟糕的解决方案。 下面显示了一个问题的示例: rails new TestApp cd TestApp rails generate scaffold User first:string last:string rake db:create rake db:migrate rails server 在不同的终端选项卡上,我使用: irb require ‘active_resource’ class User < ActiveResource::Base self.site = 'http://localhost:3000' end u = User.new() u.first = 'John' u.last = 'Shine' u.save() #This saves ok nu = User.find(1) nu.first […]