小编Ism*_*reu的帖子

使用rails编写RSpec测试时,spec/requests文件夹和spec/controllers应该包含哪些内容?

我对rails非常陌生,并试图通过实现测试来"正确"地做事.昨天我使用脚手架生成器创建了我的第一个模型/视图/控制器配置.虽然我被告知你真的不应该使用脚手架,但它很有用,这样我才能学习如何构建Rails代码.

我注意到的一件事是自动生成的RSpec主要放在spec/controllers文件夹中.然而,当我观看Railscasts的这一集时,我注意到他使用了

rails generate integration_test [test_name]
Run Code Online (Sandbox Code Playgroud)

将单个测试文件放在spec/requests文件夹中的命令.然而,他所写的所有测试都与控制器进行了交互.我想要确定的是存储这些测试的最佳实践.

什么时候应该在spec/requests文件夹中存储测试?什么时候应该在spec/controllers文件夹中存储测试?任何反馈将不胜感激!

ruby ruby-on-rails rspec2 rspec-rails ruby-on-rails-3

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

应该用应用程序捆绑宝石吗?

刚刚买了一台新机器,我抓住机会尝试新的东西.RVM非常好,我一直在使用gemsets,但在阅读了几篇博文后,我决定使用switch to rbenv并使用bundler来专门管理我的宝石,如Ruby Rogues第45集所述.

我没有那么多合作,如果我这样做,通常会与一两个人合作.

捆绑器文档详细说明了vendor/cache通过运行以下命令将gem打包到目录中的能力:

$ bundle package
$ bundle install --local
Run Code Online (Sandbox Code Playgroud)

伟大的私人宝石,可以检查源控制; 我想部署到干净的服务器或协作更容易?

但是,如果您检查GemfileGemfile.lock进入源代码管理,那么需要bundle package什么?

Ryan Mcgeary在2011年初的博客文章中提倡这种方法,并在2010年的另一篇博客文章中提到Yehuda Katz说:

您可能希望将捆绑的gem安装到其他位置,例如应用程序本身中的目录.这将确保每个应用程序都有自己的宝石副本,并提供额外的隔离级别.

这种隔离就像我想象的宝石一样,我可以想象当你拥有庞大的系统宝石列表时,很难知道你的应用程序实际使用了哪些宝石.

那么用应用包装宝石?

有人这样做吗?这种做法过时了吗?

什么是最佳实践以及在应用程序中捆绑宝石的优点/缺点是什么?

ruby gem ruby-on-rails bundler

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

Rails将附加参数传递给模型

在控制器中我有一个创建动作

  def create

    params[:note]
    @note = current_user.notes.new(params[:note])

      if @note.save
        respond_with @note, status: :created
      else
        respond_with @note.errors, status: :unprocessable_entity
      end
  end
Run Code Online (Sandbox Code Playgroud)

我想传递给模型另一个名为current_user的参数,如何做到这一点以及如何在模型方法中检索传递的参数?

ruby activerecord model ruby-on-rails

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

用mongoid重命名模型

我知道正常的迁移我可以做rename_table但是在mongoid我不能确定如何继续.

我已将所有模型/关系/路由/控制器/等都重命名,但我只需要知道如何移动数据本身.

这是嵌入式embeds_one文件btw.

更新:

看起来简单地做:

Model.all.each {|m| m.rename :old_embedded_association_name, :new_embedded_association_name }
Run Code Online (Sandbox Code Playgroud)

作品.听起来很健康吗?

ruby ruby-on-rails mongoid

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

Ruby 中的哈希“has_key”复杂性

我有一个哈希vars = {"a" => "Name", "b" => "Address" , "c" => "Phone"}。我想检查这条线的性能:

vars.has_key(:b)?
Run Code Online (Sandbox Code Playgroud)

是 O(1) 还是 O(散列大小)?

ruby algorithm hash ruby-on-rails time-complexity

5
推荐指数
2
解决办法
1940
查看次数

Ruby"不关心变量"与Prolog相同吗?

所以我都是Prolog和Ruby的新手.在大学里学习Prolog,在我自己学习Ruby.而且我在想,如果在Prolog中存在Ruby中的"不关心"或"丢弃"变量.

我刚刚打开了irb并且刚刚做了这个(假设下划线是"不关心"的标志)

1.9.2-p290 :003 > _, b, c = [1,2,3]
 => [1, 2, 3] 
1.9.2-p290 :004 > b
 => 2 
1.9.2-p290 :005 > c
 => 3 
Run Code Online (Sandbox Code Playgroud)

结果实际上是我的预期.但后来我很好奇下划线的价值在哪里以及它是什么类

1.9.2-p290 :006 > _
 => 3 
1.9.2-p290 :008 > _.class
 => Fixnum 
Run Code Online (Sandbox Code Playgroud)

嗯,这很奇怪.它不应该把价值扔掉吗?为什么存储其他价值?

然后用下划线做更多测试我看到实际发生了什么,它有最后一个评估值.

1.9.2-p290 :017 > 1
 => 1 
1.9.2-p290 :018 > _
 => 1 
1.9.2-p290 :019 > "string"
 => "string" 
1.9.2-p290 :020 > _
 => "string" 
1.9.2-p290 :021 > Hash
 => Hash 
1.9.2-p290 :022 > _
 => Hash 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:实际上是什么强调的?它真的是一个不关心变量或其他什么?它的真名是什么?(因为我没有找到很多东西与"不关心红宝石变量"与谷歌)

ruby ruby-on-rails

4
推荐指数
3
解决办法
1001
查看次数

rails precompile为什么javascript在本地不起作用,但在heroku它可以正常工作

因此,应用程序在本地运行良好,直到我预编译资产.在部署到heroku时,我做了资产预编译然后部署,并且它在heroku上工作正常,但现在看来javascript被打破了.

有关如何解决的任何建议?我应该删除公用文件夹中的文件还是使用某些配置?

提前致谢

UPDATE

我为每个在开发模式下加载的资产文件得到了其中一个,这是正常的吗?

Started GET "/assets/home.js?body=1" for 127.0.0.1 at 2012-06-15 19:16:48 +0100
Served asset /home.js - 304 Not Modified (0ms)
Run Code Online (Sandbox Code Playgroud)

这很奇怪.我正在使用twitter bootstrap,现在测试javascript是否搞砸了我添加了一个工具提示html示例来检查它是否也崩溃了,它确实有效.

但我在菜单栏上的下拉列表不起作用.这有多奇怪?

javascript ruby ruby-on-rails ruby-on-rails-3 twitter-bootstrap

3
推荐指数
1
解决办法
2596
查看次数

有没有更有效/正确的方法在Ruby中编写它?

我来自php,我刚开始用红宝石和铁轨切割牙齿.

编写以下内容是否有更高效或更"红宝石"的方式?

<% if !@user.twitter_url.empty? %>
    <a class="twitter" href="<%= @user.twitter_url %>">Twitter</a>
<% end %>
<% if !@user.facebook_url.empty? %>
    <a class="facebook" href="<%= @user.facebook_url %>">Facebook</a>
<% end %>
<% if !@user.google_plus_url.empty? %>
    <a class="googleplus" href="<%= @user.google_plus_url %>">Google Plus</a>
<% end %>
<% if !@user.linked_in_url.empty? %>
    <a class="linkedin" href="<%= @user.google_plus_url %>">Linked In</a>
<% end %>
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-3

3
推荐指数
1
解决办法
154
查看次数

批量更新属性

我正在使用Sinatra,但我猜这也适用于Rails(如果没有,请删除标签或让我知道,我将删除它).

我有一个ActiveRecord :: Base类User.它有很多属性,我正在显示一个允许某人更新特定用户的页面.问题是,我很难以干燥的方式实现更新功能.我的意思是,当我收到paramsPOST请求时,我可以这样做:

a_user.update_attributes params
Run Code Online (Sandbox Code Playgroud)

因为params也含有其他垃圾(比如:splat- 那是什么?),它会抛出一个未知的属性错误.我需要做的是:

a_user.update_attributes {:attrA => params[:attrA], 
                          :attrB => params[:attrB], ...etc } 
Run Code Online (Sandbox Code Playgroud)

(请记住,有很多属性)

这是我应该怎么做的?对我来说,出于某种原因......感觉不对.例如,如果我有另一个需要以类似方式更新的模型,我必须再次手动重写所有属性.

我正在寻找的是一些像:

a_user.filter_and_update_attributes params
Run Code Online (Sandbox Code Playgroud)

其中filter_and_update_attributes自动过滤任何坏/未知属性的参数,我可以在任何模型的任何地方使用它,必须重写这么多无用的代码.

谢谢

ruby activerecord ruby-on-rails sinatra

3
推荐指数
1
解决办法
1414
查看次数

用户标记自动链接 - Rails

在我的rails应用程序中.我正在尝试写一个帮助,在评论和链接中auto_links提到一个."@someusername"user_path("@someusername")

我怎样才能做到这一点?

我可以自定义auto_link帮手吗?

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

3
推荐指数
1
解决办法
1082
查看次数