小编Mar*_*lar的帖子

如何使用Capybara,Rails,MiniTest规范fill_in datepicker

我有一个form_tag,生成以下HTML:

<form accept-charset="UTF-8" action="http://www.example.com/product_page" id="dates_form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
  Min date: <input id="datepicker_mini" name="datepicker_mini" type="text" />
  Max date: <input id="datepicker_maxi" name="datepicker_maxi" type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)

以上是所有生成的HTML.我已经删除了任何部分和布局,以尽可能简单地调试此问题.

datepicker字段调用jquery UI datepicker.

我想避免我的测试javascript,只需用文本日期填写日期字段.我已经尝试了fill_in "datepicker_mini", :with => "01/01/2010"但是虽然它不会导致测试失败但是当我save_and_open_page用来测试时它也没有填写该字段.

更新:测试代码

it "runs report" do
  login_test_user
  within("#dates_form") do
    fill_in "datepicker_mini", :with => "01/01/2010"
    fill_in "datepicker_maxi", :with => "01/01/2020"
  end
  save_and_open_page
end
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

谢谢.

minitest capybara ruby-on-rails-3

14
推荐指数
3
解决办法
9284
查看次数

Rails - 后台作业中的ActionDispatch :: Http :: UploadedFile

我正在使用与导入csv和excel Railscast类似的想法,但由于该剧集中的标准代码需要一些时间来处理(使用ActiveRecord为文件中的每一行创建新记录)我在Heroku上获得超时并希望将导入过程移至后台作业.

我没有成功将文件变量(ActionDispatch :: Http :: UploadedFile类型)发送到作业,所以我发送了file.original_filename和file.path的各个变量.

file /var/folders/q3/xn0bp7yd2m56_4lbq0069jj80000gn/T/RackMultipart20150319-72431-1a4pnja.xlsx does not exist由于在作业开始之前文件已被删除,作业失败并出现错误,因为:

上传的文件是临时文件,其生命周期是一个请求.当对象完成时,Ruby取消链接文件,因此不需要使用单独的维护任务来清除它们.

ActionDispatch :: HTTP :: UploadedFile的

使用ActionDispatch :: Http :: UploadedFile上传的文件是否可以在后台作业中使用?

我正在使用Rails 4.2,ActiveJob和Resque

ruby-on-rails resque ruby-on-rails-4 rails-activejob

8
推荐指数
1
解决办法
2426
查看次数

Rails - 在审计中保存租户(以前的acts_as_audited)

我已经审核(以前的acts_as_audited)设置和工作。user_id 已成功保存在审计表中,但我想不出一种有效的方法来保存tenant_id(我有带范围的多租户设置)。我曾尝试使用自述文件中描述的关联审计技术,但这对我不起作用。

我目前的解决方案是在每个模型中使用after_audit回调(可以使用 Rails 关注点实现)来获取最后一次审计并保存租户 ID:

def after_audit
  audit = Audit.last
  audit.tenant_id = self.tenant_id
  audit.save!
end
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但必须再次查询审计然后更新它似乎效率低下。在保存之前将tenant_id添加到审计中对我来说更有意义,但我不知道如何做到这一点。是否可以在保存之前将tenant_id 添加到审计中?如果是,那么如何?

编辑:

我也试过在我的审计模型中包含我的默认租户范围,但它似乎没有被调用:

审计文件

class Audit < ActiveRecord::Base
 default_scope { where(tenant_id: Tenant.current_id) }
Run Code Online (Sandbox Code Playgroud)

应用控制器.rb

class ApplicationController < ActionController::Base
  around_action :scope_current_tenant

  def scope_current_tenant
    Tenant.current_id = current_tenant.id
    yield
  ensure
    Tenant.current_id = nil
  end
Run Code Online (Sandbox Code Playgroud)

编辑:2/1/16

我仍然没有对此实施解决方案,但是我目前的想法是使用:

#model_name.rb
  def after_audit
    audit = self.audits.last
    audit.business_id = self.business_id
    audit.save!
  end
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我们获得了当前模型的最后一次审计。这样我们只处理当前模型,没有机会将审计添加到另一个业务中(据我所知)。我会将此代码添加到一个问题中以使其保持干燥。

我仍然无法让正常的 Rails 回调在审计模型中工作。我目前看到的唯一另一种方法是 fork 和修改 gem 源代码。

ruby-on-rails multi-tenant acts-as-audited ruby-on-rails-4

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

Rails 4.2 - dependent :: restrict_with_error - 访问错误

:restrict_with_error如果存在关联的对象rails关联基础,则会将错误添加到所有者

我在代码中添加了以下内容:

class Owner < ActiveRecord::Base
  has_many :things, dependent: :restrict_with_error
end
Run Code Online (Sandbox Code Playgroud)

我的理解是,当我试图删除的业主有相关的东西,然后错误应该提高.在我的show动作中,owners_controller我尝试访问错误但无法找到它们:

def show
  @owner = Owner.find(params[:id])
  @owner.errors
end
Run Code Online (Sandbox Code Playgroud)

更新 - 删除代码

def destroy
  @owner = Owner.find(params[:id])
  @owner.destroy
  flash[:notice] = "Owner Deleted Successfully"
  respond_with(@owner)
end
Run Code Online (Sandbox Code Playgroud)

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

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

clusterize.js可以和datatables.net一起使用吗?

我将大量数据加载到表中.
我使用的数据表,以帮助搜索,排序,分页等.随着大量的数据(和风格的行),它往往需要很长的时间在浏览器中呈现.

是否可以将Clusterize.js与datatables.net一起使用以提高渲染速度?

datatables datatables-1.10 clusterize

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

机架超时:关闭信息/活动日志记录

安装了机架超时gem 后,如何仅显示 ERROR 相关日志?例如,我想避免在我的日志中包含以下内容:

source=rack-timeout id=8a11a8ac3dadb59a4f347d8e365faddf timeout=20000ms service=0ms state=active source=rack-timeout id=8a11a8ac3dadb59a4f347d8e365faddf timeout=20000ms service=49ms state=completed source=rack-timeout id=ee947d4a291d02821ab108c4c127f555 timeout=20000ms state=ready

以下方法无效: Rack::Timeout.unregister_state_change_observer(:active)

以下可能在正确的道路上,但我在测试时遇到了问题:

Rack::Timeout::Logger.level = Logger::ERROR

rack heroku ruby-on-rails-4

5
推荐指数
3
解决办法
3103
查看次数

带有ActiveJob gem的Rails 4.1 - 未初始化的常量ActiveJob

我跟随EngineYard的活跃工作入门.文章指出:

如果您希望默认情况下可以使用活动作业,则需要Rails 4.2.0beta1或更高版本(在旧版本的Rails中,您可以将其作为gem使用)

我想在我的Rails 4.1项目中使用ActiveJob.我将ActiveJob添加到我的gemfile中gem 'activejob'.根据这篇文章,我有:

#config/initializers/active_job.rb
ActiveJob::Base.queue_adapter = :resque
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,rails server我收到以下错误:

config/initializers/active_job.rb:1:in':未初始化的常量ActiveJob(NameError)`

编辑 - 修正错字"宝石活动工作"

更新1

按照下面的solydest建议,添加require 'active_job'到application.rb允许我不再收到uninitialized constant ActiveJob错误,但是undefined method perform_later'当我尝试调用我的工作时收到错误.我遵循边缘导轨并将代码类似于以下代码排队:

MyJob.perform_later(record)
Run Code Online (Sandbox Code Playgroud)

我的工作班的开始:

class MyJob < ActiveJob::Base
  queue_as :images
  def perform(id)
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-activejob

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

使用Rails和herokuapp的子域

我在子域名(http://railscasts.com/episodes/123-subdomains-revised)上关注了Ryan Bates的railscast ,让我的应用程序在本地完美运行.

我已部署到heroku但无法让我的子域工作.我已经阅读过有关自定义域名,DNS和CNAME记录但我不认为这是相关的,因为我想要做的就是直接在heroku上测试我在本地测试的内容.因此,而不是访问myapp.herokapp.com我希望能够访问 .myapp.herokuapp.com.目前,当我尝试这个时,我收到错误:该主机名没有配置应用程序.

有人能提供解决方案吗?

更新:

哎呀,我认为这是重复:如何在heroku上为应用程序创建子子域:(例如sub.myapp.herokuapp.com)

heroku ruby-on-rails-3.2

2
推荐指数
1
解决办法
2911
查看次数

Google 推送通知 - DOMException:注册失败 - 权限被拒绝

我正在遵循(推送位置入门指南),但在第 6 步中遇到错误:

undefined:1 Uncaught (in promise) DOMException: Registration failed - permission denied
Run Code Online (Sandbox Code Playgroud)

我的 manifest.json 文件根据网络选项卡正确加载。

我已将正确的项目编号输入到 manifest.json 中。我尝试添加指南中未提及的其他设置:

{
  "name": "Push Notifications codelab",
  "gcm_sender_id": "123456789",
  "gcm_user_visible_only": true,
  "permissions": [
    "gcm"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我按照指南在本地主机上运行我的服务器。

push-notification google-cloud-messaging

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