我正在使用Rails 4,我不知道在没有必要参数的情况下使用强参数的最佳方法是什么.那就是我做的:
def create
device = Device.new(device_params)
.................
end
private
def device_params
if params[:device]
params.require(:device).permit(:notification_token)
else
{}
end
end
Run Code Online (Sandbox Code Playgroud)
我的设备型号不验证任何内容.我知道我也可以这样做:
device = Device.new
device.notification_token = params[:device][:notification_token] if params[:device] && params[:device][:notification_token]
Run Code Online (Sandbox Code Playgroud)
是否有任何惯例或正确的方法来做到这一点?
我需要使用Rails获取上一个和下一个活动记录对象.我做到了,但不知道这是否是正确的方法.
我得到了什么:
控制器:
@product = Product.friendly.find(params[:id])
order_list = Product.select(:id).all.map(&:id)
current_position = order_list.index(@product.id)
@previous_product = @collection.products.find(order_list[current_position - 1]) if order_list[current_position - 1]
@next_product = @collection.products.find(order_list[current_position + 1]) if order_list[current_position + 1]
@previous_product ||= Product.last
@next_product ||= Product.first
Run Code Online (Sandbox Code Playgroud)
product_model.rb
default_scope -> {order(:product_sub_group_id => :asc, :id => :asc)}
Run Code Online (Sandbox Code Playgroud)
所以,这里的问题是我需要进入我的数据库并获取所有这些ID以了解谁是前一个和下一个.
尝试使用gem order_query,但它对我不起作用,我注意到它进入数据库并按顺序获取所有记录,所以,这就是为什么我做了同样但只得到id.
我发现的所有解决方案都是简单的订单查询.按ID排序或类似优先级字段.
有没有rails的约定或创建/操作只包含一行的表的正确方法?如果没有,最好的方法是什么?我需要一种方法来存储系统的配置.
谢谢.
当我的用户未经身份验证时,我试图避免使用角度js的模板错误.为此,我来到了这个stackoverflow解决方案.
它对我有用,但现在我注意到我的ng-animate停止工作而没有抛出控制台错误.
我错过了什么?
更新:这是使用的代码
var app = angular.module('app',[]);
app.config(['$provide', function($provide) {
$provide.decorator('$templateRequest', ['$delegate', function($delegate) {
var mySilentProvider = function(tpl, ignoreRequestError) {
return $delegate(tpl, true);
}
return mySilentProvider;
}]);
}]);
Run Code Online (Sandbox Code Playgroud) 我和这篇文章有同样的问题。但我正在使用 Rails,不知道如何在 activerecord 中执行此解决方法。
我正在使用seeds.rb 插入一些数据:
device_platforms = DevicePlatform.create([{id: 1, name: 'Android'}, {id: 2, name: 'IOS'}, {id: 3, name: 'Windows Phone'}])
Run Code Online (Sandbox Code Playgroud)
当我插入另一个 DevicePlatform 时,出现此异常:
Failure/Error: @device_platform = FactoryGirl.create(:device_platform)
ActiveRecord::RecordNotUnique:
PG::UniqueViolation: ERRO: duplicar valor da chave viola a restrição de unicidade "device_platforms_pkey"
DETAIL: Chave (id)=(2) já existe.
: INSERT INTO "device_platforms" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) RETURNING "id"
Run Code Online (Sandbox Code Playgroud)
该消息是葡萄牙语,表示具有该 ID 的行已经存在。
谢谢。
我正在尝试将一个链接显示为由rails action mailer呈现的视图中的动作.
mailer.rb
class Mailer < ActionMailer::Base
default from: "foo@bar.com"
def catalog_download_request(email, catalog)
@catalog = catalog
mail({
to: email
})
end
end
Run Code Online (Sandbox Code Playgroud)
的routes.rb
Rails.application.routes.draw do
scope "(:locale)" do
resources :catalogs, :path => I18n.t("routes.catalogs"), only: [:index, :show]
end
end
Run Code Online (Sandbox Code Playgroud)
development.rb:
config.action_mailer.default_url_options = { host: "http://localhost:3000" }
config.action_mailer.asset_host = "http://localhost:3000"
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "localhost",
port: 1025
}
config.action_mailer.raise_delivery_errors = false
Run Code Online (Sandbox Code Playgroud)
我打电话给邮件的模特:
class CatalogDownloadRequest < ActiveRecord::Base
belongs_to :catalog
after_create :send_mail
private
def send_mail
Mailer.catalog_download_request(email, catalog).deliver
end
end
Run Code Online (Sandbox Code Playgroud)
这就是我在我看来尝试的内容: …
有没有办法用 RSpec 测试数据库索引是否存在?
我正在使用friendly_id gem,但经常忘记为 slug 字段创建数据库索引。因此,我想将其包含在我的 RSpec 测试中。