小编Wil*_*ckl的帖子

Rails 4强参数,无需参数

我正在使用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)

是否有任何惯例或正确的方法来做到这一点?

ruby ruby-on-rails strong-parameters ruby-on-rails-4

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

Rails获取上一个和下一个活动记录对象的最佳方式

我需要使用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排序或类似优先级字段.

activerecord ruby-on-rails

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

只有一行的表的Rails约定

有没有rails的约定或创建/操作只包含一行的表的正确方法?如果没有,最好的方法是什么?我需要一种方法来存储系统的配置.

谢谢.

ruby-on-rails

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

Ng-animate使用$ templateRequest装饰器停止工作

当我的用户未经身份验证时,我试图避免使用角度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)

angularjs ng-animate angularjs-decorator

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

Rails + postgres 自动增量未在显式 id 插入时更新

我和这篇文章有同样的问题。但我正在使用 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 的行已经存在。

谢谢。

postgresql activerecord ruby-on-rails

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

ActionMailer link_to显示操作失败,并显示"缺少必需的键:[: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)

这就是我在我看来尝试的内容: …

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

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

RSpec 测试数据库索引

有没有办法用 RSpec 测试数据库索引是否存在?

我正在使用friendly_id gem,但经常忘记为 slug 字段创建数据库索引。因此,我想将其包含在我的 RSpec 测试中。

rspec ruby-on-rails

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