Tag: 对象

在rails中创建新对象时出错

每当我尝试为模型创建对象时,我都会在rails中收到此错误。 我正在使用Windows 7 C:\Ruby\joker\chapter3>ruby script/console Loading development environment (Rails 2.3.8) >> mycb = ComicBook.new SyntaxError: C:/Ruby/joker/chapter3/app/models/comic_book.rb:19: syntax error, u nexpected $end, expecting kEND from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:380:in `load_without_new_constant_marking’ from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:380:in `load_file’ from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:521:in `new_constants_in’ from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:379:in `load_file’ from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:259:in `require_or_load’ from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:425:in `load_missing_constant’ from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:80:in `const_missing’ from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_suppo rt/dependencies.rb:92:in `const_missing’ […]

在lib文件夹中使用Ruby Object时未初始化的常量错误

我有一个相当复杂的应用程序,在lib文件夹中使用Ruby Objects(我第一次使用ruby对象)。 我一直得到一个未初始化的常量错误,如下所示: 通过复选框Rails 4添加多个嵌套属性(可能有多个表单) uninitialized constant ProjectsController::ProjectUpdater 我的表单尝试做的是根据预制的“模板”任务和里程碑创建启动任务和启动里程碑。 因此,当用户创建项目时,他们已经添加了一些常见任务。 此代码与此前的问题和答案直接相关: 我的控制器: class ProjectsController < ApplicationController def new_milestones @project.milestones.build @project.tasks.build @milestones_templates = MilestoneTemplate.where(template_id: @project.template_id) end def update respond_to do |format| **result = ProjectUpdater.perform(@project, update_params) == true** []}, {:ids => []}, { :milestone_ids => []},:id, :name, :project_id, :milestone_template_id, :project_id, task_attributes: [{:names => []}, {:ids => []}, […]

Rails:获取记录的位置?

假设我有一个Questions模型,我将所有答案都提取到一个特定问题。 我可以轻松地执行each_with_index并找出答案的索引或“位置”(与该特定问题的其他答案相关)。 但是,说我想得到一个具体的答案……我怎么还能弄清楚答案的索引与特定问题相关的所有其他答案的关系。 示例Answer数据: ID text question_id 23 awesome 3 27 boooyah 3 38 snap 3 如果我做了Answer.find(27)我怎么能弄清楚该记录是第二项(假设我按ID排序……虽然我可以在任何领域订购)。

指定传递给JSON对象的Rails对象的属性

我在Rails中有一个具有属性A,B,C,D和E的对象。当通过JSON对象将此对象传递回客户端时,如何告诉rails控制器仅包含属性A和D. JSON对象? 在我的Users控制器中,我的代码如下: @user = User.find(params[:id]) respond_to do |format| format.html format.json { render :json => @user} end 但是,此代码有效,返回的JSON对象包含@user对象的所有属性。 在将任何内容发送回客户端之前,如何限制JSON对象中包含的属性? 更新:lucapette提供了一些关于幕后发生的事情的好背景。 由于有时我可能希望返回所有属性,因此我最终使用以下代码: format.json { render :json => @user.to_json(:only => [“id”])}

RSpec设置会话对象

我正在尝试从我的控制器规范中设置会话对象。 it ‘use invalid coupon’ do session[:coupon] = ‘abcd’ Service.any_instance.stub(:validate_coupon).with(session[:coupon]).and_return(‘abcd’) get :index expect(flash[:coupon__notice]).to be nil end 但是当我检查会话而不是@coupon对象时,我得到一个包含字符串’coupon’的@data,并且测试失败。

在Ruby on Rails中,如何在会话之间将对象保留在内存中

我正在尝试构建一些东西(最终是一个gem,但现在是一个应用程序),其工作方式如下。 例如,假设DB记录是狗的品种。 每个品种都有一个Dog父类和一个子类。 直到运行时才知道实际品种。 当服务器开始时,它将从DB加载记录并根据记录实例化类的实例,例如,我可能有两个小猎犬和贵宾犬。 当有人来到服务器时,他们可能想要访问其中一个狗实例。 为什么不动态创建实例? 在我的例子中,“狗”基本上是包含算法和数据的类。 该算法没有改变,数据很少改变(大约几天),但是算法本身的执行,其使用数据和传递的一些动态数据,例如时间戳,将被访问多次。 如果必须重新创建对象的实例并且每次只是为了在下一个请求上再次执行请求而加载数据(请求不会更改对象的状态),那将是愚蠢的。 当我可以重复使用同一个对象时,我会创建并销毁多个对象。 将它保留在会话中是没有意义的,因为想要一个贵宾犬的人不需要在她的会话对象中有beagles信息; 这是无关紧要的(并且没有规模)。 如何将这些对象保存在内存中? 我基本上想要一个查找表来保存实例。 在Java中,我将使用某种类型的hashmap或数组创建一个单例,它位于内存中。 在rails中我通过在lib文件夹中创建一个单例类来尝试这个。 我认为 – 我可能不理解这一点 – 当会话消失时,实例(事实上它是单身人士没有实际意义)正在丢失。 我找到的最接近的答案是http://www.ruby-forum.com/topic/129372 ,它基本上将所有内容放在课程领域和方法中。 不知怎的,这似乎不对。 TIA! 另外:我来自Java。 在Java中,我只是创建一个位于堆上或者可能位于JNDI树中的对象,当HTTP请求进入时,它们将由一个servlet或EJB或一些每个请求项处理,然后可以访问持久对象。 我似乎无法在rails中找到相应的东西。

Rails 4:accepted_nested_attributes_for和质量分配

我试图在Rails 4中重现railscast#196 。但是,我遇到了一些问题。 在我的例子中,我尝试生成一个电话簿 – 每个人可以有多个PhoneNumbers 这些是我的控制器的重要部分: class PeopleController < ApplicationController def new @person = Person.new 3.times{ @person.phones.build } end def create @person = Person.create(person_params) @person.phones.build(params[:person][:phones]) redirect_to people_path end private def person_params params.require(:person).permit(:id, :name, phones_attributes: [ :id, :number ]) end end 这是我的新观点 New Person 不用说我有has_many :phones和accepts_nested_attributes_for :phones在我的人模型和belongs_to :person手机模型中的人。 我有以下问题: 而不是3个电话号码字段,新表单中只有一个 当我提交表单时,我收到一个错误: ::加载ActiveModel ForbiddenAttributesError 在线 @person.phones.build(params[:person][:phones]) […]

为什么Class是Class的实例,而不是Object的实例?

Class.instance_of?(Object)返回false ,而Class.instance_of?(Class)返回true 。 我觉得这很令人惊讶,因为我认为作为对象的Class必须是Object类的一个实例。 它怎么可能是它自己的一个实例? 但假设Class是Object类的一个实例,似乎会导致更加混乱的问题; 因为Object是一个类,所以它必须是Class类的一个实例。 这里发生了什么?

在Ruby的许多类实例中记忆数据的好方法是什么?

考虑:生成数据的对象的许多实例。 每次运行只生成一次数据会很棒。 class HighOfNPeriods < Indicator def generate_data @indicator_data = DataStream.new (0..@source_data.data.count – 1).each do |i| if i < @params[:n_days] … @indicator_data.add one_data end end HighOfNPeriods不同实例有不同的params和不同的@source_data 。 以下是指标的使用方法: class Strategy attr_accessor :indicators def initialize params … end 从Strategy调用HighOfNPeriods.generate_data方法。 每个Strategy都会获得HighOfNPeriods的新实例,因此不可能将其作为某种全局值来实现。 除此之外,它不应该是全球性的。 unless @indicator_data不起作用,因为需要在HighOfNPeriods许多实例之间共享数据。 所以,问题是: What is a good way to memoize the instance variable `indicator_data` or […]

更改Ruby对象的状态会更改其他类成员吗?

我有一个主要在多维数组周围实现一些逻辑的类,它基本上是一个数字网格。 这些数字可以交换位置等。但是,当它们交换时,同一类的其他对象也似乎被修改。 我不知道为什么。 我正在使用实例变量来存储网格,所以我不明白为什么更改显然会影响其他类成员。 这是一个简化的例子; class TestGrid attr_accessor :grid @grid = [] def initialize(newgrid) @grid = newgrid end def to_s out = “” @grid.each{|row| out += row.join(“|”) + “\n” } out end def swap(x, y) @grid[x[0]][x[1]], @grid[y[0]][y[1]] = @grid[y[0]][y[1]], @grid[x[0]][x[1]] end end 当我们与IRB中的单个实例进行交互时,事情看起来很好; 1.9.3-p385 :001 > require ‘./TestGrid.rb’ => true 1.9.3-p385 :002 > x = […]