Tag: ruby on rails 3

在ruby中不推荐使用error_messages_for – 如何找到替换?

我正在读一本旧书(2008)来学习ruby,它适用于rails 2.0.2。 我已经决定使用Rails 3来找出当时ruby与现在之间的差异。 到目前为止,大部分内容都很好,我很容易找到并纠正这些差异。 我现在遇到的问题是,代码使用了一个不推荐使用的函数error_messages_for并查看了http://apidock.com/rails/ActionView/Helpers/ActiveRecordHelper/error_messages_for我无法找到替换或以任何方式向我展示什么新的方式是。 有人可以帮我找到使用error_messages_for的新方法,以及我应该如何找到新的做事方式以及发现新的最佳做法的方法等。

通过在其他表上计数的rails命令

我正在从Hartl教程中为twitter应用添加测验function,并拥有以下模型: 用户与教程几乎相同: class User < ActiveRecord::Base has_many :followed_users, through: :relationships, source: :followed has_many :takens, dependent: :destroy has_many :questions, through: :takens end 使用的是用户ID的问题ID表: class Taken < ActiveRecord::Base belongs_to :user belongs_to :question end 问题没什么有趣的: class Question < ActiveRecord::Base attr_accessible :category, :correct, :option1, :option2, :option3, :qn end 我希望能够按照他们所进行的测试次数来显示follow_users和followers。 在控制台中,这可以通过: User.find_by_id(1).question_ids.count 然后我可以这样做: User.find_by_id(1).followers.first.question_ids.count 在控制台中获取单个关注者的计数。 我觉得我差不多了。 如何通过’takens’计数对关注者和follow_users进行排序? (我也在看cache_count,起初看起来很有希望,但可能不是我需要的……)

急于加载和使用’where’方法的麻烦

我正在运行Ruby on Rails 3.1。 我正在使用includes方法,我想了解为什么当我在一个渴望加载的集合上调用where方法时,它会重新加载关联的对象,而不是仅仅在eager加载的集合中找到该对象。 由于所有相关对象都已被急切加载,我希望where方法不会命中数据库来重新加载这些对象! 也就是说,我有以下几点: article_categories = article .categories .where(:user_id => @current_user.id) .includes(:comments) 如果我跑 # CASE 1: article_categories.each do |article_category| article_category.comments.map(&:title) end 急切加载按预期工作:避免了“N + 1查询问题”。 但是,上面的代码还返回没有 “ :user_id == @current_user.id ”的注释标题,但我根本不想检索那些。 所以,因为我认为通过使用热切加载我已经获得所有注释,我使用了另外的where(:user_id => @current_user.id)语句,如下面的代码所示: # CASE 2: article_categories.each do |article_category| article_category.comments.where(:user_id => @current_user.id).map(&:title) end 但是,在这种情况下,急切加载不能按预期工作: 不能避免“N + 1查询问题”…但注释有“ :user_id == @current_user.id ”! 我想用“ […]

耙子流产了! 操作不被允许 – Carrierwave删除validation失败的tmp文件

我正在使用Carrierwave,s3和fog来上传video。 我添加了一个file_size_validator文件,以便video不能大于5mb。 我对Carrierwave如何工作的理解(请告知是否不正确)。 Carrierwave将文件的副本保存到tmp文件文件夹,然后对其执行validation,如果通过则将文件上传到S3,下面的代码将从本地文件系统中删除tmp文件: video_uploader.rb before :store, :remember_cache_id after :store, :delete_tmp_dir def cache_dir Rails.root.join(‘public/uploads/tmp/videos’) end # store! nil’s the cache_id after it finishes so we need to remember it for deletion def remember_cache_id(new_file) @cache_id_was = cache_id end def delete_tmp_dir(new_file) # make sure we don’t delete other things accidentally by checking the name pattern if @cache_id_was.present? […]

指定明确的’主题’的麻烦?

我正在使用Ruby on Rails 3.0.9和RSpect 2.我试图以下面的方式重构一些spec文件(为了测试更少代码类似的User类对象属性值): describe User do let(:user1) { Factory(:user, :users_attribute_a => ‘invalid_value’) } let(:user2) { Factory(:user, :users_attribute_b => ‘invalid_value’) } let(:user3) { Factory(:user, :users_attribute_c => ‘invalid_value’) } it “foreach user” do [ user1, user2, user3 ].each do |user| subject { user } it “should be whatever” user.should_not be_valid … end end end end […]

Rails 2.3.4 Vs Rails 3 + Book – RoR中的初学者

我已经开始使用Ruby和Rails开发,并且我是过去2年的Java开发人员 ( 学生 )。 我有两件事: 学习Ruby 让我的网站上ROR 我使用Rails进行敏捷Web开发,第2版 。 所以,这是我的问题: 如何开始使用Rails的敏捷Web开发 ,我对Ruby一无所知,熟悉Java。 第2 版和第3版有什么区别? 人们说这些变化对于一个首发来说是无关紧要的,这个陈述到底有多远? 我应该从Rails 2.3.4或Rails 3 ( 即将开始)开始? Rails3它是!

如何修复“未初始化的常量SampleApp”

我正在尝试运行rails server ,我看到的是这样的: C:\Users\Mama i Tata>cd c:/rails_project/my_app c:\rails_project\my_app>rails s => Booting WEBrick => Rails 3.2.6 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server Exiting c:/rails_project/my_app/config/routes.rb:1:in `’: uninitialized constant SampleApp (NameError) from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.6/lib/rails/applic ation/routes_reloader.rb:40:in `block in load_paths’ from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.6/lib/rails/applic ation/routes_reloader.rb:40:in `each’ from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.6/lib/rails/applic ation/routes_reloader.rb:40:in `load_paths’ from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.6/lib/rails/applic […]

具有不同日期/时间格式的ActiveRecord

我们有一个应用程序,用户可以设置他/她的首选日期/时间格式。 用户应在整个应用程序中以配置的格式输入datetime时间。 现在的问题是,在create/update ActiveRecord时,几种格式的datetime被错误地解析。 例如,用户已将日期/时间格式设置为hh:mm dd/MM/yyyy 。 现在,如果用户输入17:00 04/05/2012则将其解析为5 PM 5 Apr, 2012 5 PM 4 May, 2012 ,应该是5 PM 5 Apr, 2012 5 PM 4 May, 2012 1.8.7 :004 > a = Article.create!(:name => ‘a1′, :published_at => ’17:00 04/05/2012’) => # 我知道ruby / rails具有预定义的格式集,日期/时间字符串将根据这些格式进行评估,如果按顺序匹配任何格式,它将使用该格式解析给定的字符串。 另一个例子 1.8.7 :006 > a = Article.create!(:name => ‘a1’, :published_at […]

Ruport – 未定义的方法`each’表示“”:String

对不起我的英语不好。 我正在关注这个tuto: http: //ruportbook.com/printable_documents.html,第一个例子,但我得到未定义的方法`每个’为“”:字符串一直,我用这段代码创建了一个新文件: class MultiTableController < Ruport::Controller stage :multi_table_report class PDF MultiTableController build :multi_table_report do data.each { |table| pad(10) { draw_table(table) } } render_pdf end end end 然后,在名为workers_controller.rb的现有控制器中,我执行了下一个操作: def index_report t1 = Table(%w[abc]) << [1,2,3] << [4,5,6] t2 = Table(%w[abc]) << [7,8,9] < [t1,t2]) end 我当然把这条路线添加到routes.rb。 然后,我在浏览器上收到此错误: undefined method `each’ for “1”:String 但错误不仅发生在这个例子中,我已经尝试了许多其他例子,我得到了同样的错误。 一些帮助? […]

有关使用gsub的任何建议吗? 在irb控制台中工作正常,但不会在实际文件中查找/替换

我有一些webapp的基本框架(一些静态页面,用户身份validation,使用rpec进行基本测试)。 我想将此作为未来webapps的基础。 我把我的项目命名为“框架”,所以如果我把它分开,我将会有大约十几个实例,我必须用我正在创建的新应用程序的名称替换术语“Framework”。 这个项目是github.com/bnd5k/framework 。 README文件包含我需要进行更改的文件列表。 我可以手工完成这些更改,但我更愿意自动执行此过程。 我认为最简单的方法是在Framework中包含一个rake文件。 所以,我创建了名为renamer.rake的rake文件。 我的rake文件基于这篇文章: 如何在文件文本中搜索模式并将其替换为给定值 。 这就是我想出的。 task :rename do file_names = [‘config/environments/test.rb’, ‘config/environments/production.rb’, ‘config/environment.rb’] file_names.each do |file_name| text = File.read(file_name) puts text.gsub(“Framework”, “funktrunkgunk”) end end 这段代码的工作原理是它用不同的术语替换术语“框架”,但它只能在控制台中使用。 我需要它来实际更改文件的内容。 我需要做什么? 我是否需要打开每个文件而不是只读它? 仅供参考这个代码只列出了几个文件(这样我就可以测试这个方法是否有效),替换术语最终将是一个变量,而不是“funktrunkgunk”。 一旦我得到这个部分,我想设置它,以便任何人都可以克隆框架repo到他们的机器,cd到框架目录,启动rails服务器,然后转到他们的浏览器上的本地主机重命名该文件那里。 我将public / index.html设置为包含表单字段的基本页面,用户可以在其中输入自己的应用程序名称。 一旦用户单击“名称应用程序”按钮,它将运行rake文件。 这听起来可行吗?