小编And*_*vey的帖子

如何在rspec测试中存根gmaps4rails地理编码功能?

我正在使用gmaps4rails,并尝试开发一些测试.

我有一家工厂

factory :country do
   sequence(:name) { |n| "Country#{n}" }
end
Run Code Online (Sandbox Code Playgroud)

这显然不被谷歌认可.

Validation failed: Gmaps4rails address Address invalid
Run Code Online (Sandbox Code Playgroud)

API调用也需要时间在我的测试中运行.

如何将API调用存根?

我试过添加

before(:each)
  Country.stub(:geocode)
end
Run Code Online (Sandbox Code Playgroud)

到spec文件,但它没有任何效果.

我的模型看起来像这样

class Country < ActiveRecord::Base
  acts_as_gmappable :lat => 'latitude', :lng => 'longitude'
  def gmaps4rails_address
    "#{self.name}" 
  end
  geocoded_by :gmaps4rails_address

  after_validation :geocode
end
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何想法.

ruby-on-rails gmaps4rails factory-bot

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

如何检查局部变量是否定义在局部变量中?

测试本地变量是否已定义并将其传递给部分的正确语法是什么?

例如,我渲染部分

<%= render partial: "data-map", locals: {lat: @model.lat, lon: @model.lon, zoom: 10} %>
Run Code Online (Sandbox Code Playgroud)

并且在部分需要做类似的事情

<%= map( options: {
  latitude: if lat.defined? ? lat : 0,
  longitude: if lon.defined? ? lon : 0,
  zoom: if zoom.defined? ? zoom : 50
  }
%>
Run Code Online (Sandbox Code Playgroud)

我很难让这个工作。

我还在API中看到了以下内容

<% if local_assigns.has_key? :headline %>
  Headline: <%= headline %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但我也遇到了麻烦。也许我的语法不正确。

感谢任何指点

ruby-on-rails

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

如何保护link_to @variable跨站点脚本漏洞

我刚刚开始使用brakeman gem来探索我的rails应用程序的安全漏洞.

除了几个跨站点脚本警告之外,我设法让一切都变得整洁.

这些都有以下共同点:

  • 它们都是link_to标签
  • 它们在类,alt或title属性中都有实例变量
  • 实例变量都表示包含关联模型的活动记录查询
  • 实例变量都是"可评论的".这描述了用户生成的注释的多态关联,类似于此Railscast的修订版本.

例如

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %>
Run Code Online (Sandbox Code Playgroud)

哪里

@model = @commentable = Model.includes(:association1, association2: {:nested-association1, :nested-association2}).find(params[:id])
Run Code Online (Sandbox Code Playgroud)

这是我需要关注/采取行动吗?我认为Rails 3.2默认会逃脱这些.

我欢迎建议,以帮助我更好地理解这个问题,并确定我应采取的步骤,如果有的话.

ruby-on-rails brakeman

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

为什么长臂猿会抛出'未初始化的常量Gibbon :: API(NameError)'

我正在尝试将长臂猿宝石添加到Rails 3.2应用程序中.

我按照说明操作,并设置了一个带有以下内容的gibbon.rb初始化程序

Gibbon::API.api_key = ENV["MAILCHIMP_API_KEY"]
Gibbon::API.timeout = 15
Gibbon::API.throws_exceptions = false
Run Code Online (Sandbox Code Playgroud)

该应用程序正在投掷

uninitialized constant Gibbon::API (NameError)
Run Code Online (Sandbox Code Playgroud)

我尝试过require 'gibbon',但似乎没有任何效果.

为什么课程没有初始化?

ruby-on-rails mailchimp gibbon

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

如何通过Mailchimp API更新分组?

我正在尝试通过API从我的Rails 3.2应用程序订阅和更新Mailchimp列表的成员.

一切都很好,除了我无法设置兴趣小组.

设置分组的正确格式是什么.

我试过了

merge_vars: 'GROUPINGS'  => [
  [ 
    'id' => group_id,
    'groups' => ['array', 'of', 'groups']
  ]
]
Run Code Online (Sandbox Code Playgroud)

merge_vars: 'GROUPINGS'  => [
  [ 
    'id' => group_id,
    'groups' => "comma,separated,groups"
  ]
]
Run Code Online (Sandbox Code Playgroud)

merge_vars: 'GROUPINGS'  => [
  0 => [ 
    'id' => group_id,
    'groups' => "comma,separated,groups"
  ]
]
Run Code Online (Sandbox Code Playgroud)

和其他几个变化.

似乎没有什么工作,文档也不清楚

ruby-on-rails mailchimp

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

如何在需要 = true 时建立和保存父子记录?

鉴于以下模型

class Parent
  has_many :children
end
class Child
  belongs_to :parent, required: true
end
Run Code Online (Sandbox Code Playgroud)

是否可以同时创建 Parent 和 Children?

@parent = Parent.new(valid_attributes)
@parent.children.build(valid_attributes)
@parent.save
@parent.errors.messages 
#=> {:"children.parent"=>["must exist"]}
Run Code Online (Sandbox Code Playgroud)

删除required: true允许记录保存。但是有没有办法让父母和孩子一起被保存,同时仍然验证父母的存在?

ruby-on-rails

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

如何在创建工厂之前强制 FactoryGirl 创建父级?

我有一个事件模型,当保存时,它会更新父用户的一些属性。

class User
  has_many :events
end

class Event
  belongs_to :user
  before_save :update_user_attributes

  validates :user, presence: true

  def update_user_attributes
    self.user.update_attributes(hash_of_params)
  end
end
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作 - 用户必须存在并登录才能与事件交互。

但是我的测试套件引起了问题,特别是事件工厂。

FactoryGirl.define do
  factory :event do
    user
  end
end
Run Code Online (Sandbox Code Playgroud)

看起来,由于 FactoryGirl 构建事件的顺序,创建事件时用户不可用,导致update_user_attributes失败。

这意味着

create(:event)
# ActiveRecord::RecordNotSaved:
# Failed to save the record
Run Code Online (Sandbox Code Playgroud)

build(:event).save
Run Code Online (Sandbox Code Playgroud)

通过没有错误

有多种方法可以防止引发错误,例如,user.persisted?update_user_attributes方法中检查该错误,或运行回调after_save。但我的问题特别与 FactoryGirl 有关。

鉴于上述事实,有没有办法在创建事件之前强制创建关联的用户?

ruby-on-rails factory-bot

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

如何让 Rails 使用 Yarn 包中包含的图像/字体?

在第一次将应用程序迁移到 Rails 5.1 时,我尝试使用 yarn 而不是 bower 来管理前端依赖项。

一切都很好,我可以通过相关的清单文件包含js和文件。cssapplication.js/css

但是,如果这些文件依赖于其他资源(例如,图像、字体等的目录),那么 Rails 对它们一无所知。

给定一个纱线包,其中包括:

/css
  |-styles.css
/images
  |-background.jpg
Run Code Online (Sandbox Code Playgroud)

在哪里

#styles.css
.background {
  background-image: url(../images/background.jpg);
}
Run Code Online (Sandbox Code Playgroud)

日志(显然)显示

No route matches [GET] "/images/background.jpg"
Run Code Online (Sandbox Code Playgroud)

如何确保 Rails 知道 Yarn 包中的这些图像并正确编译它们?

这可能吗?还是我忽略了一些明显的东西?

ruby-on-rails yarnpkg

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

如何使用Webpacker使jquery对链轮可用?

我刚刚开始在现有应用程序中尝试使用Webpacker。

从我读过的所有文章中,我的理解是Webpacker和Sprockets可以共存,并且可以通过全局变量使Webpacker中编译的库(例如jquery)可供Sprokets使用。

但是我在资产管道中的所有jQuery正在提高 ReferenceError: Can't find variable: $

我是否误解了,或者代码中有错误?

我添加了jQuery

yarn add jquery

并在environment.js中分配变量

const { environment } = require('@rails/webpacker');

const webpack = require('webpack');
environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery'
}));

module.exports = environment;
Run Code Online (Sandbox Code Playgroud)

这有效:

#javascript/packs/application.js
$(function () {
    console.log('Hello World from Webpacker via JQUERY');
});
Run Code Online (Sandbox Code Playgroud)

这不

#assets/javascripts/application.js
$(function () {
    console.log('Hello World from Sprockets via JQUERY');
});
# ReferenceError: Can't find variable: $
Run Code Online (Sandbox Code Playgroud)

预期的行为是什么?

ruby-on-rails webpacker

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

为什么 Guard 在 Docker 化 Rails 应用程序后未检测到文件更改?

我正在尝试“dockerize”现有的 Rails 开发应用程序。这是我第一次尝试使用 Docker。

我想设置 Guard 来监听文件更改并运行相关规范。

Guard 服务似乎运行正常,日志显示:

guard_1     | 16:35:12 - INFO - Guard is now watching at '/app'
Run Code Online (Sandbox Code Playgroud)

但是当我编辑/保存规范文件时,Guard 没有运行任何测试。

这是一个现有的应用程序,我正在将其迁移到 Docker 中。它有一个在 Docker 之外工作的保护文件。

我搜索并阅读了许多帖子(例如这篇文章),但我不确定从哪里开始调试它。任何人都可以为我指出正确的方向并让 Guard 监听文件更改。

我的 docker-compose.yml 如下所示:

version: '3'

services:
  postgres:
    ports:
      - "5432:5432"
    volumes:
      - $HOME/postgres-data:/var/lib/postgresql
    image: postgres:9.6.9

  redis:
    ports:
      - "6379:6379"
    depends_on:
      - postgres
    image: redis:5.0-rc

  web:
    build: .
    ports:
      - "3000:3000"
    command: /bin/sh -c "rails s -b 0.0.0.0 -p 3000"
    depends_on:
      - postgres
      - redis
    env_file:
      - .env …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails guard docker

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