我对rails非常陌生,并试图通过实现测试来"正确"地做事.昨天我使用脚手架生成器创建了我的第一个模型/视图/控制器配置.虽然我被告知你真的不应该使用脚手架,但它很有用,这样我才能学习如何构建Rails代码.
我注意到的一件事是自动生成的RSpec主要放在spec/controllers文件夹中.然而,当我观看Railscasts的这一集时,我注意到他使用了
rails generate integration_test [test_name]
Run Code Online (Sandbox Code Playgroud)
将单个测试文件放在spec/requests文件夹中的命令.然而,他所写的所有测试都与控制器进行了交互.我想要确定的是存储这些测试的最佳实践.
什么时候应该在spec/requests文件夹中存储测试?什么时候应该在spec/controllers文件夹中存储测试?任何反馈将不胜感激!
刚刚买了一台新机器,我抓住机会尝试新的东西.RVM非常好,我一直在使用gemsets,但在阅读了几篇博文后,我决定使用switch to rbenv并使用bundler来专门管理我的宝石,如Ruby Rogues第45集所述.
我没有那么多合作,如果我这样做,通常会与一两个人合作.
捆绑器文档详细说明了vendor/cache
通过运行以下命令将gem打包到目录中的能力:
$ bundle package
$ bundle install --local
Run Code Online (Sandbox Code Playgroud)
伟大的私人宝石,可以检查源控制; 我想部署到干净的服务器或协作更容易?
但是,如果您检查Gemfile
并Gemfile.lock
进入源代码管理,那么需要bundle package
什么?
Ryan Mcgeary在2011年初的博客文章中提倡这种方法,并在2010年的另一篇博客文章中提到Yehuda Katz说:
您可能希望将捆绑的gem安装到其他位置,例如应用程序本身中的目录.这将确保每个应用程序都有自己的宝石副本,并提供额外的隔离级别.
这种隔离就像我想象的宝石一样,我可以想象当你拥有庞大的系统宝石列表时,很难知道你的应用程序实际使用了哪些宝石.
有人这样做吗?这种做法过时了吗?
什么是最佳实践以及在应用程序中捆绑宝石的优点/缺点是什么?
在控制器中我有一个创建动作
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的参数,如何做到这一点以及如何在模型方法中检索传递的参数?
我知道正常的迁移我可以做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)
作品.听起来很健康吗?
我有一个哈希vars = {"a" => "Name", "b" => "Address" , "c" => "Phone"}
。我想检查这条线的性能:
vars.has_key(:b)?
Run Code Online (Sandbox Code Playgroud)
是 O(1) 还是 O(散列大小)?
所以我都是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)
所以我的问题是:实际上是什么强调的?它真的是一个不关心变量或其他什么?它的真名是什么?(因为我没有找到很多东西与"不关心红宝石变量"与谷歌)
因此,应用程序在本地运行良好,直到我预编译资产.在部署到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
我来自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) 我正在使用Sinatra,但我猜这也适用于Rails(如果没有,请删除标签或让我知道,我将删除它).
我有一个ActiveRecord :: Base类User
.它有很多属性,我正在显示一个允许某人更新特定用户的页面.问题是,我很难以干燥的方式实现更新功能.我的意思是,当我收到params
POST请求时,我可以这样做:
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自动过滤任何坏/未知属性的参数,我可以在任何模型的任何地方使用它,必须重写这么多无用的代码.
谢谢
在我的rails应用程序中.我正在尝试写一个帮助,在评论和链接中auto_links
提到一个."@someusername"
user_path("@someusername")
我怎样才能做到这一点?
我可以自定义auto_link
帮手吗?
ruby ×10
ruby-on-rails ×10
activerecord ×2
algorithm ×1
bundler ×1
gem ×1
hash ×1
javascript ×1
model ×1
mongoid ×1
regex ×1
rspec-rails ×1
rspec2 ×1
sinatra ×1