我正在使用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)
谢谢你的任何想法.
测试本地变量是否已定义并将其传递给部分的正确语法是什么?
例如,我渲染部分
<%= 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)
但我也遇到了麻烦。也许我的语法不正确。
感谢任何指点
我刚刚开始使用brakeman gem来探索我的rails应用程序的安全漏洞.
除了几个跨站点脚本警告之外,我设法让一切都变得整洁.
这些都有以下共同点:
例如
<%= 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默认会逃脱这些.
我欢迎建议,以帮助我更好地理解这个问题,并确定我应采取的步骤,如果有的话.
我正在尝试将长臂猿宝石添加到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',但似乎没有任何效果.
为什么课程没有初始化?
我正在尝试通过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)
和其他几个变化.
似乎没有什么工作,文档也不清楚
鉴于以下模型
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允许记录保存。但是有没有办法让父母和孩子一起被保存,同时仍然验证父母的存在?
我有一个事件模型,当保存时,它会更新父用户的一些属性。
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 有关。
鉴于上述事实,有没有办法在创建事件之前强制创建关联的用户?
在第一次将应用程序迁移到 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 包中的这些图像并正确编译它们?
这可能吗?还是我忽略了一些明显的东西?
我刚刚开始在现有应用程序中尝试使用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)
预期的行为是什么?
我正在尝试“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 ×10
factory-bot ×2
mailchimp ×2
brakeman ×1
docker ×1
gibbon ×1
gmaps4rails ×1
guard ×1
webpacker ×1
yarnpkg ×1