小编Jam*_*ier的帖子

如何规范依赖Memcached的操作?

我们有一个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)

出于这个原因,在这种情况下缓存不仅是一个很好的行为,而是预期的行为和我想要测试的东西.因此,关闭缓存是行不通的.

memcached rspec ruby-on-rails rspec-rails

7
推荐指数
1
解决办法
2597
查看次数

设计routes.rb中的current_user

有没有办法在routes.rb中访问当前用户?我想要这样的映射:

match /profile => redirect("/profiles/{current_user.name}")
Run Code Online (Sandbox Code Playgroud)

env['warden']似乎没有设置,所以我无法访问warden.user.name.

routes ruby-on-rails devise ruby-on-rails-3

7
推荐指数
2
解决办法
2932
查看次数

如何在capistrano的deploy.rb文件中使用Rails 5.2凭证?

我刚刚将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变量
    • 我不喜欢这如何分隔/自定义这一设置
  • 以某种方式使capistrano可以访问 Rails.application.credentials
    • 我不知道这是个好主意还是走这条路线是否需要注意其他事项
  • 在滚动条中删除部署跟踪
    • ???

capistrano ruby-on-rails capistrano3 ruby-on-rails-5 rollbar

7
推荐指数
4
解决办法
1452
查看次数

Rails:正确路由命名空间资源

如果您将资源映射添加到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,这将失败.

ruby-on-rails

6
推荐指数
1
解决办法
3065
查看次数

模型名称到控制器名称

如果我不知道对象是什么,如何从对象中获取控制器名称?

我想做:

object.class.tableize
Run Code Online (Sandbox Code Playgroud)

但是Rails说:

undefined method `tableize' for #<Class:0xb6f8ee20>
Run Code Online (Sandbox Code Playgroud)

我尝试添加相同结果的demodulize.

谢谢

ruby-on-rails

6
推荐指数
1
解决办法
5299
查看次数

在多个列上使用acts_as_list

我有一个可能独特的情况,我需要一个模型,根据它加入的模型有两个不同的顺序.示例如下:

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列,但我真的不太热衷于此,因为这需要一大堆额外的表.

ruby-on-rails acts-as-list

6
推荐指数
1
解决办法
2148
查看次数

使用Rspec和Factory Girl测试before_save回调

我很确定我错过了一些非常基本的东西.

我想测试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)

我有以下工厂coursequestion:

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)

rspec2 ruby-on-rails-3 factory-bot

6
推荐指数
1
解决办法
4506
查看次数

如何在rails 4中从数据库中呈现布局?

是否可以从文本数据字段中读取字符串并将其呈现为布局?

如果我使用它,它会1.html.erb在布局下查找文件:

layout: '1'
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-4

6
推荐指数
1
解决办法
665
查看次数

"git symbolic-ref HEAD refs/heads/gh-pages"和"git branch gh-pages"之间有什么区别?

这是这个过程创建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将创建一个新的根分支.我想知道根分支和常规分支之间的区别是什么.

git github

5
推荐指数
1
解决办法
5032
查看次数

找不到Rails 4.0记录

在我的编辑动作中,如果记录不存在,我永远不会找到未找到的记录.我做错了什么.

这是我的编辑操作

    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页面.我该如何使用这个文件?

提前致谢

ruby-on-rails

5
推荐指数
1
解决办法
5455
查看次数