Tag: ruby on rails 3

在Rails完成加载后运行代码?

我有一个需要每分钟执行一次的周期性任务(使用delayed_job)。 我希望Rails在加载完成后自动将其排队,如果系统中还没有这样的任务。 在整个Rails启动流程结束时运行一些代码的好地方是什么? 有人建议使用config / environments / development.rb(或其他环境),但是当我从那里排队作业时,delayed_job会给我ActiveRecord问题。 我咨询了http://guides.rubyonrails.org/initialization.html ,似乎也没有明确的位置。 是否可以通过rake或其他方式在我的应用程序代码外部完成这种部署后设置? 有什么建议? 谢谢!

这个Rails代码适用于Ruby 1.8.7,但不适用于1.9.2

编辑 : 这有效: current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt), :url => submit_quiz_course_course_step_path(@course_step.course, @course_step) do |f| %> 但这不会:(尝试使用form_for作为函数form_for() current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt), :url => submit_quiz_course_course_step_path(@course_step.course, @course_step)) do |f| %> 如主题中所述,代码在Ruby 1.8.7中运行完美,但在1.9.2中有错误,似乎无法弄清楚原因。 代码 : ‘course_steps/header’ %> ‘course_steps/quiz_results’ %> Instructions current_user.id, :started => Time.now.utc, :step_quiz_id => @course_step.step.step_quiz.id) : @quiz_attempt, :url […]

轨道3中的自动生成路径?

从一些railscast( 特别是这个 )的外观来看,似乎有一些“* _path”变量的自动生成并没有发生在我身上。 在这个rails cast中,edit_mutliple_products_path似乎是自动生成的(我通常不喜欢使用该单词)。 当我按照相同的步骤尝试访问类似的路径时,我得到这个: undefined local variable or method `edit_multiple_distributions_workflows_path’ for #<#:0x132af3290>

如何从rails表单中的对象关联提供数据?

我有一个对象,我正在开发一个具有许多属性的控制器。 但是,由于我创建的数据模型,我必须编辑的大多数属性都是通过其他表中的关联保存的。 EG:我的文章通过标签表有标签(其他表中保存了大约20个其他属性)。 该文章通过多态关联等具有许多其他属性。 关联工作得很好,并且可以保存每个属性的多个条目。 但是,有一件事很难将编辑操作简化为控制器。 通常你可以保存@article = Article.find(params [:id])并显示所有属性。 这意味着表单具有服务的当前属性,并且该人员可以进行更改。 但是,对于通过关联保存的内容,这些字段为空。 我有一个shiv解决方案,例如,@ article.tag_list = @ article.tags.map(&:name)。 这使字段现在显示标签。 但是,对每个属性执行此操作会为控制器中的编辑操作添加许多行。 有没有更好的办法? 如果有一些代码我应该发布,我可以 – 只是没有,因为它现在很乱,所以我想我会解释。

Rails 4 Racing / Concurrency。 避免死锁

我目前在Sidekiq-Unique-Jobs和Sidekiq-Status的帮助下使用Sidekiq在我的应用程序上执行任务。 工人执行的工作很小,几乎总是立即执行。 (很少或根本没有队列) 我正在“黑客攻击”sidekiq同步执行任务(检查Controller无法找到工作人员创建的对象 ),这些作业很小且执行速度快(通常不到1秒)。 我的应用程序需要同步运行作业并获取其详细信息(记录创建/更新) 随着我使用的“跛脚”解决方案: 20.times do status = Sidekiq::Status::get balance, :exp_status if [“done”].include?(status) break end sleep(0.2) end 创建一个队列并确保通过params(sidekiq-unique-jobs)同一个用户同时执行不超过1个作业我可以避免所有死锁,但是我觉得它应该是一个更好的方法来执行此操作,而不是黑客sidekiq因为它意味着异步执行作业。 问题是 :对于sidekiq是否有任何替代或类似的gem可以限制输入但是默认情况下是同步运行的? 我不能只问控制器Balance.find_or_create_by(user: user, market: market)因为它迟早会给我死锁(记录被同时编辑/操纵/创建)但我觉得这个sidekiq解决方案我从长远来看,使用也不行。 我错过了一些基本的东西吗? 如何确保通过中间件或类似的东西不会同时执行重复的参数/动作以避免死锁?

模型中的酉常数

我有一个使用Mongoid的非常简单的模型。 我已经添加了使用Redcarpet解析MD并存储它。 但是在update_attributes期间,它会抛出exception。 运行模型并通过rails c运行更新工作正常。 class Post include Mongoid::Document field :contents_markdown field :contents key :title before_create :markdown before_save :markdown protected def markdown if self.contents_markdown self.contents = Redcarpet.new(self.contents_markdown).to_html.html_safe end end end 这是控制器爆炸了。 def update @post = Post.find(params[:id]) respond_to do |format| if @post.update_attributes(params[:post]) format.html { redirect_to @post, notice: ‘Post was successfully updated.’ } format.json { head :ok […]

如何使用activerecord的查询界面和范围来识别比赛中的最爱

我有两个模型Starter和Race。 Starter belongs_to :race Race has_many :starters Starter和race的属性如下: Starter attributes: id, race_id, finish_position, odds Race: id, race_date, race_number, field_size 我正在努力完成两件事: 选择每场比赛中的最爱 。 #对于特定比赛,赔率最低的初学者 * 选择任何打败的collections夹 *#一个有finish_position> 1 *的collections夹 确定collections和打败collections的逻辑非常简单(见上文),但我很难将逻辑转换为activerecord,这也是一个例子,可以使用activerecord范围。 这是我最喜欢的尝试: Starter.joins(:race).where(:finish_position => minimum(finish_position)) 这不起作用,但我仍在努力。 我想理想的是拥有一个最喜欢的范围和一个打败的范围。

Javascript表单子目录

当我点击提交而没有整个页面刷新时,我正在刷新表“dashboard_categories”,这是我到目前为止所做的: http : //pastie.org/7822560 我现在仍然坚持使用Javascript,因为我是一个完整的新手。 我知道我必须抓住表单提交,发送数据然后调用部分刷新…但不知道如何。 有任何想法吗? 希望我离我不远…… 我在index.html.erb上有一个javascript的content_for标记:

Ruby on Rails方法控制器中的模拟

我正在尝试在我的一个rails控制器(在这种情况下,Instagram.get_access_token)中模拟对外部API的方法调用,我遇到了一些麻烦。 如上所述,代码仍在调用真正的Instagram.get_access_token方法。 我怎么让控制器使用我的简单模拟? sessions_controller.rb: class SessionsController < ApplicationController require 'instagram' include ApplicationHelper def auth_callback response = Instagram.get_access_token(params[:code], redirect_uri: auth_callback_url) # end end sessions_controller_spec.rb: require ‘spec_helper’ require ‘ostruct’ describe SessionsController do describe “GET #auth_callback” do context “when there is an existing user” do let(:response) { OpenStruct.new(access_token: “good_access_token”) } it “parses an access_token from the get response” […]

从Rails(表单)向Javascript发送数据

我在Rails中存储了一些数据,然后我从Javascript访问。 (我正在使用gon gem这样做)。 当我在控制器中对字符串值(对于gon)进行硬编码时,它工作正常,我可以从javascript访问这些数据: #set in rails, available in JS gon.stuff = { “1” => “one stuff\n print ‘hi’.. “, “2” => “two stuff\n print ‘by’ “} 但是,当我通过Rails表单提交数据(到Post的’stuff’列)时,它最终会“过度字符串化”,因此它在Javascript中显示为一个完整的字符串: post.stuff text_area: { “1” => “stuff about one\n more stuff.. “, “2” => “two stuff\n more stuff”} 在rails中设置数据: gon.stuff = @post.stuff JS数据最终为完整字符串: “{ “1” => “stuff about […]