我们有一个Rails应用程序,我们用RSpec测试.我们想要规范依赖于Memcached的操作.这样做的最佳做法是什么?
我想通过将所有调用存根来实现这一点Rails.cache.这是一个好主意吗?
根据@Pan Thomakos的建议,我正在添加一些关于我正在尝试测试的场景的其他详细信息:
我们在系统中有帐户的概念,因此在每次请求时我们都会检索当前用户和当前帐户.因为系统中的帐户不多,所以我们将它们全部保存在缓存中并从那里检索它们.
def self.find_by_slug(slug)
Rails.cache.fetch(Account.cache_key_for_slug(slug), :expires_in => 1.day) { super }
end
Run Code Online (Sandbox Code Playgroud)
出于这个原因,在这种情况下缓存不仅是一个很好的行为,而是预期的行为和我想要测试的东西.因此,关闭缓存是行不通的.
有没有办法在routes.rb中访问当前用户?我想要这样的映射:
match /profile => redirect("/profiles/{current_user.name}")
Run Code Online (Sandbox Code Playgroud)
env['warden']似乎没有设置,所以我无法访问warden.user.name.
我刚刚将Rails应用程序更新为5.2,并将其配置为使用新config/credentials.yml.enc文件。
当我尝试部署时,出现以下错误:
NameError: uninitialized constant Rails
/Users/me/Documents/project/config/deploy.rb:27:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)
这指向我config/deploy.rb文件中的这一行:
set :rollbar_token, Rails.application.credentials[:rollbar_token]
Run Code Online (Sandbox Code Playgroud)
因此看来,在capistrano运行时,它无权访问Rails.application.credentials。
你们都如何处理?我有一些主意...
ENV变量
Rails.application.credentials
capistrano ruby-on-rails capistrano3 ruby-on-rails-5 rollbar
如果您将资源映射添加到routes.rbin Rails 2.3中的命名空间,那么如何使link_to(以及form_for等)理解它应该获取命名空间控制器而不是根命名空间中的控制器?
例如...
有了这个routes.rb:
map.namespace :admin do |admin|
admin.resources :opt_in_users
end
Run Code Online (Sandbox Code Playgroud)
这在视图中:
<%= link_to @anOptInUser %>
Run Code Online (Sandbox Code Playgroud)
这link_to应该使用link_for_admin_opt_in_user,而是它尝试使用link_for_opt_in_user,这将失败.
如果我不知道对象是什么,如何从对象中获取控制器名称?
我想做:
object.class.tableize
Run Code Online (Sandbox Code Playgroud)
但是Rails说:
undefined method `tableize' for #<Class:0xb6f8ee20>
Run Code Online (Sandbox Code Playgroud)
我尝试添加相同结果的demodulize.
谢谢
我有一个可能独特的情况,我需要一个模型,根据它加入的模型有两个不同的顺序.示例如下:
class Book
acts_as_list :column => :genre, :scope => :genre
acts_as_list :column => :author, :scope => :author
belongs_to :genre
belongs_to :author
end
Run Code Online (Sandbox Code Playgroud)
所以基本上我要做的是有一个Book模型,它是两个列表的一部分,一个用于它出现的类型页面,另一个用于它出现的作者页面.
acts_as_list似乎不支持使用2 move_to_top位列作为方法,例如不允许您指定要移动到顶部的列表.
有没有人对我如何实现这一点有任何建议?现在我想我将不得不创建一个连接表,例如books_genres有一个position列,但我真的不太热衷于此,因为这需要一大堆额外的表.
我很确定我错过了一些非常基本的东西.
我想测试before_save回调是否完成它应该做的事情,而不仅仅是它被调用.
我写了以下测试:
it 'should add lecture to question_type' do
@course = Factory :course,
:start_time => Time.now - 1.hour,
:end_time => Time.now
@question = Factory.create(:question,
:course_id => @course.id,
:created_at => Time.now - 10.minutes)
@question.question_type.should == 'lecture'
end
Run Code Online (Sandbox Code Playgroud)
我有以下工厂course和question:
Factory.define :course do |c|
c.dept_code {"HIST"}
c.course_code { Factory.next(:course_code) }
c.start_time { Time.now - 1.hour }
c.end_time { Time.now }
c.lecture_days { ["Monday", Time.now.strftime('%A'), "Friday"] }
end
Factory.define :question do |q|
q.content {"Why don't I understand …Run Code Online (Sandbox Code Playgroud) 是否可以从文本数据字段中读取字符串并将其呈现为布局?
如果我使用它,它会1.html.erb在布局下查找文件:
layout: '1'
Run Code Online (Sandbox Code Playgroud) 这是这个过程给创建GitHub的项目页面一个分支:
cd /path/to/repo-name
git symbolic-ref HEAD refs/heads/gh-pages
rm .git/index
git clean -fdx
echo "My GitHub Page" > index.html
git add .
git commit -a -m "First pages commit"
git push origin gh-pages
Run Code Online (Sandbox Code Playgroud)
它声明git symbolic-ref HEAD refs/heads/gh-pages将创建一个新的根分支.我想知道根分支和常规分支之间的区别是什么.
在我的编辑动作中,如果记录不存在,我永远不会找到未找到的记录.我做错了什么.
这是我的编辑操作
class OffersController < ApplicationController
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
def show
@offer = Offer.find(params[:id])
end
def edit
@offer = Offer.find_by(edit_hash: params[:edit_hash])
@country = Country.find_by(name: @offer.country)
@states = State.find(:all, :conditions => { country_id: @country })
end
private
def record_not_found
render text: "404 Not Found", status: 404
end
end
Run Code Online (Sandbox Code Playgroud)
对于nil,我总是得到未定义的方法`country':NilClass用于我的未编辑记录.
此外,我提高了我的节目动作中找不到的记录,但我想使用我公共文件夹中的404.html页面.我该如何使用这个文件?
提前致谢
acts-as-list ×1
capistrano ×1
capistrano3 ×1
devise ×1
factory-bot ×1
git ×1
github ×1
memcached ×1
rollbar ×1
routes ×1
rspec ×1
rspec-rails ×1
rspec2 ×1