如何将此代码转换为原始sql并在rails中使用?因为当我在heroku中部署此代码时,会出现请求超时错误.我认为如果我使用原始sql,这将更快.
@payments = PaymentDetail.joins(:project).order('payment_details.created_at desc')
@payment_errors = PaymentError.joins(:project).order('payment_errors.created_at desc')
@all_payments = (@payments + @payment_errors)
Run Code Online (Sandbox Code Playgroud) contest_entry_spec.rb
require 'spec_helper'
describe ContestEntry do
before(:all) do
@admission=Factory(:project_admission)
@project=Factory(:project_started, :project_type => @admission.project_type)
@creative=Factory(:approved_creative, :creative_category => @admission.creative_category)
@contest_entry=Factory(:contest_entry, :design_file_name => 'bla bla bla', :owner => @creative, :project => @project)
end
context 'non-specific tests' do
subject { @contest_entry }
it { should belong_to(:owner).class_name('User') }
it { should belong_to(:project) }
it { should have_many(:entry_comments) }
it { should validate_presence_of(:owner) }
it { should validate_presence_of(:project) }
it { should validate_presence_of(:entry_no) }
it { should validate_presence_of(:title) }
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行这些测试时,一切都很好,但是如果我在(:all)之前改变(之前):(每次),每次测试都会失败.我不知道为什么会发生这种情况?
这是错误
Failure/Error: @contest_entry=Factory(:contest_entry, :design_file_name …Run Code Online (Sandbox Code Playgroud) 我有用户模型,我想为所有用户记录添加唯一的字符串键.列名应该是unsubscribe_key.
在迁移用户记录之前:
id = 1
username = "text"
id = 2
username = "abc"
Run Code Online (Sandbox Code Playgroud)
迁移用户记录后:
id = 1
username = "text"
unsubscribe_key = "5HQdTSsNRY6YCodmzr"
id = 2
username = "abc"
unsubscribe_key = "Jlewfw0324Lwp0sefr"
Run Code Online (Sandbox Code Playgroud) 两者之间有什么区别吗?
User.count
Run Code Online (Sandbox Code Playgroud)
和
User.count(:all)
Run Code Online (Sandbox Code Playgroud)
我将rails升级到4.0然后当我使用ModelName.count(:all)它运行良好但如果我使用ModelName.count以下错误发生.他们的机器人的方式在rails 3.2中运行良好
SELECT COUNT() FROM "users"
PG::WrongObjectType: ERROR: count(*) must be used to call a parameterless aggregate function
LINE 1: SELECT COUNT() FROM "users"
Run Code Online (Sandbox Code Playgroud) 这是我的Tag模型,我不知道如何测试Rails.cache功能.
class Tag < ActiveRecord::Base
class << self
def all_cached
Rails.cache.fetch("tags.all", :expires_in => 3.hours) do
Tag.order('name asc').to_a
end
end
def find_cached(id)
Rails.cache.fetch("tags/#{id}", :expires_in => 3.hours) do
Tag.find(id)
end
end
end
attr_accessible :name
has_friendly_id :name, :use_slug => true, :approximate_ascii => true
has_many :taggings #, :dependent => :destroy
has_many :projects, :through => :taggings
end
Run Code Online (Sandbox Code Playgroud)
你知道怎么测试吗?
如何将此迁移转换为原始 sql?或者我可以转换吗?
class AddUnsubscribeTokenToUsers < ActiveRecord::Migration
def self.up
add_column :users, :unsubscribe_token, :string, :unique => true
User.all.each do |user|
user.unsubscribe_token = ActiveSupport::SecureRandom.hex(18)
end
end
def self.down
remove_column :users, :unsubscribe_token
end
end
Run Code Online (Sandbox Code Playgroud) 我有project_mailer布局,但如果project_notification方法有参数,我想使用不同的方法unsubscribe_link = true.
layout "project_mail"
def project_notification(user, projects, unsubsribe_link = false)
attachments.inline['logo_252.png'] = File.read(Rails.root + 'public/images/logo_252.png')
@user = user
@projects = projects
mail(:to => user.email, :subject => "New Projects")
end
Run Code Online (Sandbox Code Playgroud) 有没有办法将 ActiveJob 队列适配器设置为内联特定后台作业?
就我而言,我想在测试中运行一些后台作业来构建集成测试。我不关心作业内部细节,因为我的目的只是运行后台作业并断言结果。但是,这些集成测试并未涵盖所有后台作业,因此我不想全局设置队列适配器。
这是关于sql语句的基本问题.
有什么区别
SELECT * FROM "Users"
Run Code Online (Sandbox Code Playgroud)
和
SELECT "Users".* FROM "Users"
Run Code Online (Sandbox Code Playgroud) 有没有更好的方法来编写这个代码.我认为它似乎很糟糕.
if !params[:project].blank?
redirect_to project_path(params[:project])
else
redirect_to root_url
end
Run Code Online (Sandbox Code Playgroud)