Tag: 的Ruby on 轨道

铁轨的助手

我刚刚开始使用Rails,而且还有很多东西我还需要学习,所以我很可能比普通的Rails / Ruby问题更频繁地使用Stackoverflow。 我只想弄清楚Helpers如何在Rails中工作。 从我到目前为止看到的,Helpers旨在与Views一起使用,而不是与控制器一起使用。 但是我想创建一个简单的函数来validationparams中给出的用户输入(检查是否定义了某些params并可选择检查它们的值是否有效)。 任何人都可以向我解释一下实现这个的最佳方法是什么? (请记住,我将在许多不同的控制器中使用它,因此它应该是全局可用的。) 我还注意到默认情况下Rails不会在主应用程序文件夹中生成lib文件夹。 开发人员是将他们的lib放在主文件夹中的app文件夹之外,还是Rails使用不同的库?

Backtrace Silencer无法正常工作

在我的Rails应用程序中,我已经设置了以下backtrace消音器,正如Michael Hartl在他的Rails教程中所建议的那样: Rails.backtrace_cleaner.add_silencer { |line| line =~ /rvm/ } 但我仍然得到了我打算过滤的所有噪音: 7:13:55 – INFO – Running: test/controllers/tags_controller_test.rb Started ERROR[“test_should_get_index”, TagsControllerTest, 0.45206] test_should_get_index#TagsControllerTest (0.45s) ActionController::UrlGenerationError: ActionController::UrlGenerationError: No route matches {:action=>”index”, :controller=>”tags”} /Users/chris/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.1.6/lib/action_dispatch/journey/formatter.rb:39:in `generate’ /Users/chris/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.1.6/lib/action_dispatch/routing/route_set.rb:599:in `generate’ 显然,字符串“rvm”出现在最后两行中。 但他们仍然出现了。 将字符串更改为“.rvm”没有任何区别。

在Rails中cattr_accessor?

我正在阅读Rails 3的Rails指南,他们使用这种方法: cattr_accessor :attribute 这个方法是什么? 它是一个Rails方法吗? 我以前从未见过它。

如何自定义Rails 3 STI列名

我有一个名为Post的课程: class Post < ActiveRecord::Base end 我有一个名为Question的类inheritance自Post : class Question < Post end 我有一个名为Answer的类,它也inheritance自’Post’: class Answer < Post end 在Post ,我有一个名为post_type_id的列,其类型为Integer 。 如何使用STI和特定列名称和类型从Postinheritance? 0表示Question , 1表示Answer 。 (0和1是posts表中post_type_id的值)

处理Oauth 2.0-facebook gem error 100:已使用此授权码

我一直在为我的rails应用程序设置facebook身份validation,在测试时,在使用我的facebook帐户登录后,我不断收到此错误: OAuth2::Error: {“error”:{“message”:”This authorization code has been used.”,”type”:”OAuthException”,”code”:100}} 我不确定从哪里开始,但似乎无法在网上找到任何其他内容。 任何指导将不胜感激,很高兴提供更多信息,如果它有用。

使用rspec进行集成测试并设计sign_in env

我正在使用设计配置使用omniauth facebook登录集成。 从我的spec/request测试中调用sign_in方法时,我得到: undefined method `env’ for nil:NilClass 规格: describe FacebookController do include Devise::TestHelpers it “should display facebook logged in status” do @user = User.create(:id => “123”, :token => “token”) sign_in @user visit facebook_path end end

Rails中的Flash消息被转移到下一页

我正在使用帮助方法在我的应用程序中显示错误和通知消息,如下所示。 def display_flash_content [:error, :notice].map do |key| collection = flash[key].blank? ? [] : (flash[key].respond_to?(:map) ? flash[key] : [flash[key]]) collection.map {|item| content_tag(:div, item, :class => key.to_s) } end end 我的布局有这个 我需要在执行某些操作时显示这些消息,然后重定向到特定页面(这很正常)。 但我的问题是这个Flash消息在页面之间仍然存在。 在页面之间会出现两次,需要在向用户显示后立即将其清除。 如何处理这种情况。 请帮我!

设计before_filter authenticate_admin?

我通过添加admin属性为Devise添加了一个admin角色。 你能告诉我这是否是创建需要管理员用户签名的before_filter的正确方法: 在任何控制器: before_filter :authenticate_admin! 在application_controller中 protected unless current_user.try(:admin?) redirect_to :new_user_session_path end

如何构建任务’elasticsearch:import:model’

好吧,我安装了elasticsearch-rails gem(版本0.1.5),我可以清楚地看到gem文件中的任务。 但是当我跑步的时候 bundle exec rake environment elasticsearch:import:model CLASS=’Comment’ 我收到这个错误。 运行rake environment -D也没有向我显示任务。 elasticsearch正在运行,如果我curlhttp://localhost:9200它会响应我。 为什么这不起作用?

仅在属性更改时更新User的属性

我项目的原始,愉快工作版本看起来像这样: 1)用户填写表格(新动作)并点击提交(创建动作) 2)用户被重定向到他们的编辑页面(编辑操作使用由模型创建的edit_id,而不是Rails自动生成ID),这显示用户已经提交的信息 3)用户可以选择更改信息(更新操作)并重新提交 在此版本中,即使用户在编辑页面中没有任何更改并提交,页面仍将闪烁成功警报。 从数据库的角度来看,我并不在意,因为表单预先填充了用户的信息,update_attributes方法只是用相同的信息覆盖旧信息。 从用户的角度来看,它很烦人,所以我想确保只更新信息,并且只有当用户实际更改某些内容时才会闪烁成功警报。 我认为这很容易,改变旧的代码: def update @request = Request.find_by_edit_id(params[:edit_id]) if @request.update_attributes(request_params) flash[:success] = true redirect_to edit_request_path(@request.edit_id) else render ‘edit’ end end 并在“if”中添加一个额外的组件,如下所示: def update @request = Request.find_by_edit_id(params[:edit_id]) if @request.update_attributes(request_params) && @request.changed? flash[:success] = true redirect_to edit_request_path(@request.edit_id) else render ‘edit’ end end 但这不起作用。 现在发生的是,在编辑页面上,如果我没有更改任何信息并点击提交,没有任何事情发生(这很好),但如果我改变信息并点击提交,仍然没有任何事情发生(这是不好的)。 我究竟做错了什么? 注意:我最初认为这是一个操作错误的顺序,所以我把它作为嵌套if,首先是if @ request.update_attributes,第二个if @ request.changed,但是这个也不起作用……