由于一些部署问题,我停止在git中跟踪schema.rb.不知何故,我已经填满了这个,并且我的schema.rb文件已经消失了.
有没有办法从数据库或迁移中重新生成schema.rb?我宁愿不丢失现有数据.
我只是学习Ruby,所以如果这对于这里来说太新手太过道歉了,但是我无法从镐书中解决这个问题(可能只是没有仔细阅读).无论如何,如果我有这样的数组:
arr = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
...而且我想,比如说,将数组中的每个值乘以3,我已经计算出执行以下操作:
arr.each {|item| item *= 3}
Run Code Online (Sandbox Code Playgroud)
......不会得到我想要的东西(我明白为什么,我不是在修改数组本身).
我没有得到的是如何在迭代器之后从代码块内部修改原始数组.我确信这很容易.
我正在将我的开发环境从sqlite3切换到postgresql 8.4并且有最后一个障碍.
在我的原始中,我在辅助方法中有以下行;
result = Users.find(:all, :order => "name collate NOCASE")
Run Code Online (Sandbox Code Playgroud)
这提供了一个非常好的不区分大小写的搜索.我不能为postgresql复制这个.应该很容易 - 任何想法?
谢谢.
我可以生成几行代码,但是我想知道是否有一个很好的干净Rubyesque方式.如果我没有明确的,就是我正在寻找的是一个数组的方法,如果给定的(说),这将返回true [3,3,3,3,3]或["rabbits","rabbits","rabbits"]但将返回false用[1,2,3,4,5]或["rabbits","rabbits","hares"].
谢谢
我已经玩Rails几年了,并且已经制作了一些正在制作的可通过的应用程序.我总是避免做任何测试,但我决定纠正这个问题.我正在尝试为我已经开始运行但正在不断修改的工作编写的应用程序编写一些测试.我担心任何改变都会破坏事情,所以我想让一些测试运行起来.我已经阅读了RSpec的书,观看了一些截屏视频,但我正在努力开始(这让我觉得你做的事情只有在你实际完成之后才明白).
我正在尝试编写应该是我的ReportsController的简单测试.我的应用程序的问题在于,整个事情几乎都位于身份验证层之后.如果你没有登录就没有任何作用所以我必须先模拟一个登录才能发出一个简单的get请求(虽然我想我应该写一些测试来确保没有登录就没有任何作用 - 我会去以后).
我已经建立了一个RSpec,Capybara,FactoryGirl和Guard的测试环境(不知道使用哪种工具,所以使用Railscasts的建议).到目前为止我编写测试的方法是在FactoryGirl中创建一个用户,就像这样;
FactoryGirl.define do
sequence(:email) {|n| "user#{n}@example.com"}
sequence(:login) {|n| "user#{n}"}
factory :user do
email {FactoryGirl.generate :email}
login {FactoryGirl.generate :login}
password "abc"
admin false
first_name "Bob"
last_name "Bobson"
end
end
Run Code Online (Sandbox Code Playgroud)
然后像这样写我的测试;
require 'spec_helper'
describe ReportsController do
describe "GET 'index'" do
it "should be successful" do
user = Factory(:user)
visit login_path
fill_in "login", :with => user.login
fill_in "password", :with => user.password
click_button "Log in"
get 'index'
response.should be_success
end
end
end
Run Code Online (Sandbox Code Playgroud)
这样就失败了;
1) ReportsController GET 'index' should be successful …Run Code Online (Sandbox Code Playgroud) 我已经编写了一个小型rails应用程序,通过xmlhttprequests向另一个站点提供内容,这些站点将在另一个域上运行(无法让它们在同一台服务器上运行).我知道我需要在我的rails服务器上设置access-control-allow-origin,以允许请求的网页访问这些资料.
似乎有很好的文档说明如何使用Apache,这可能是我部署网站后将使用的服务器.虽然我正在开发,但我希望只使用webrick,因为我习惯使用rails.有没有办法配置webrick以在rails中提供适当的http标头?
我的问题几乎就在标题中.
例如,在使用Rails 3.1应用程序创建的默认Gemfile中;
gem 'sass-rails', '~> 3.1.5'
Run Code Online (Sandbox Code Playgroud)
好像我应该知道这一点,但我在Bundler网站上找不到任何引用.
我在Ruby中有一个二维数组,我想生成一个工作副本.显然我不能这样做;
array=[[3,4],[5,9],[10,2],[11,3]]
temp_array=array
Run Code Online (Sandbox Code Playgroud)
因为我对temp_array所做的任何修改也都会对数组进行修改,因为我只是复制了对象标识符.我以为我可以通过简单地使用来解决这个问题.
temp_array=array.dup
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为temp_array只是一个对象标识符的数组,它会被复制,所以我最终还是修改了初始数组(如果我理解了什么时候出错了).我找到的解决方案是做以下事情;
temp_array=[]
array.each{|sub| temp_array << sub.dup}
Run Code Online (Sandbox Code Playgroud)
这实现了我想要的,但似乎是解决我的问题的尴尬方式.
如果我不知道我的数组将包含什么(例如,如果阵列的某些部分可能具有3维),我担心这将如何工作.我可能必须测试数组的每个成员的类,看看是否必须迭代它才能复制它.根本不是一项不可能的任务,但对我来说似乎很麻烦.这仅仅是Ruby缺乏对多维数组的内置支持的结果,还是有一个简单的内置函数来执行此操作而我错过了?
只是增加了关于时区和DST问题的百万个问题.
我有一个具有单独的日期和时间字段的表单,我结合起来创建一个DateTime,就像这样
start_time = DateTime.parse("#{parse_date(form_date)} #{form_start_time} #{Time.zone}")
Run Code Online (Sandbox Code Playgroud)
如果我在2012年8月21日和15:00填写表单,那么这些是我在重新加载表单时看到的值.如果我然后在模型中查看我的start_time属性,则将其正确设置为Tue, 21 Aug 2012 15:00:00 EST +10:00.
我遇到的问题是,如果我在今年晚些时候使用日期,那么夏令时就会开始(我在澳大利亚).如果我使用2012年12月21日和15:00然后检查start_time我看到了Fri, 21 Dec 2012 16:00:00 EST +11:00.
我对这个问题的解释是日期保存在我当前的时区(+10:00),因为这是我告诉DateTime.parse要做的事情.但是当返回该值时,Rails会查看日期并说"嘿,它是12月的夏令时"并返回+11:00时区的时间.
我想要做的是告诉DateTime.parse如果DST生效,将时间保存在+11:00时区.显然将Time.zone传递给我的字符串并不能实现这一点.有一个简单的方法吗?我可以看到使用Time#dst做到这一点的方法吗?但我怀疑这会产生一些非常丑陋的错综复杂的代码.我以为可能会有一种我错过的内置方式.
我的routes.rb中有一个正常运行的重定向;
match "/invoices" => redirect("/dashboard")
Run Code Online (Sandbox Code Playgroud)
我现在想要为此添加一个查询字符串,例如,
/invoices?show=overdue
Run Code Online (Sandbox Code Playgroud)
将被重定向到
/dashboard?show=overdue
Run Code Online (Sandbox Code Playgroud)
我尝试过几件事.我最接近的是;
match "/invoices?:string" => redirect("/dashboard?%{string}")
Run Code Online (Sandbox Code Playgroud)
这给了我正确的输出,但原始URL仍然显示在浏览器中.
我敢肯定我错过了一些非常简单的东西,但我看不清楚.