Tag: ruby on rails 4

控制器找不到worker创建的对象

花了一整天试图解决这个问题.. 基本上控制器正在调用worker来执行“Balance”的创建。 工作程序执行成功并创建记录但是当它返回到控制器时,它找不到创建的对象。 如何强制它寻找“更新数据库”记录? 控制器: balance = BalanceCreator.perform_async(userx.id, market.id) 20.times do status = Sidekiq::Status::get balance, :exp_status if [“done”].include?(status) break end sleep(0.2) end statux = Sidekiq::Status::get balance, :exp_status puts statux # Shows correct status exp_id = Sidekiq::Status::get balance, :exp_id puts exp_id # Shows correct id user_exp = Balance.find(exp_id) # Error – WARN: Couldn’t find Balance with […]

simple_form undefined方法`model_name’用于NilClass:Class

我正在学习Rails,我想使用simple_form。 我正在创建一个简单的应用程序(我的第一个),我想创建一个注册表单。 我用过rails g scaffold用户名:string password:string来创建我的模型和控制器。 我也在使用Foundation gem,如果这很重要,我使用正确的Foundation命令安装simple_form。 我一直在寻找两个小时的答案,我尝试了很多东西,我不知道我的代码有什么问题。 ## app/views/home/index.html.erb ## ## app/models/user.rb ## class User < ActiveRecord::Base end ## app/controllers/users_controller.rb class UsersController < ApplicationController before_action :set_user, only: [:show, :edit, :update, :destroy] # GET /users # GET /users.json def index @users = User.all end # GET /users/1 # GET /users/1.json def show end # […]

WickedPDF第一页的不同保证金设置?

使用: wkhtmltopdf-binary 0.9.9.1 wicked_pdf 0.10.2 rails 4.1.7 ruby 2.1.3 OS X 10.10.1 (64-bit) 我有一个占用一点空间的标题,所以我必须在我的WickedPDF选项中使用:margin => { :top => 40 } (以及标题间距)。 但是, 我不希望这是我的第一页 ,因为标题仅用于第2页及以上。 我该如何实现这一目标? 尝试 对于第一页中的内容,我尝试通过CSS: position: absolute; top: -20; 这导致内容被边缘区域“剪切”。 似乎应用:margin => {:top=>40}在标题片段和PDF内容之间创建了一个阻塞的白色矩形。 我尝试在第一页使用:cover选项。 不幸的是,边距设置也适用于封面模板。 此外,wkhtmltopdf 0.12似乎存在语法差异,因此它会中断 我能想到的一些解决方案: 创建2个单独的PDF并将它们连接在一起。 需要找到PDF合并gem等 通过Javascript生成持久标头。 说实话,这很棘手; 特别是当有桌子rest时(桌子高度超过一页)。 此外,每个内容部分的标题都不同。 我目前通过wkhtmltopdf javascript助手( frompage , frompage , page , section等)工作 […]

表多元化?

我有3个表具有以下关系(为了简单和清晰,表已被修剪): create_table “users”, force: :cascade do |t| t.string “name”, limit: 255, null: false end create_table “sleeves”, force: :cascade do |t| t.integer “user_id”, limit: 4 t.integer “report_id”, limit: 4 end create_table “reports”, force: :cascade do |t| t.string “name”, limit: 255, null: false end 我的模特喜欢这样: class User < ActiveRecord::Base has_many :sleeves end class Sleeve < ActiveRecord::Base belongs_to […]

为什么组计算字段不会显示在查询结果中?

我有这样的查询: query = Link.select(‘url, max(created_at) as created_at, count(*) as url_count’).group(:url).order(‘url_count desc, created_at asc’) query.results.first示例结果: 2.2.0 :002 > query.first => # 为什么这里没有url_count ,即使我知道它是。 2.2.0 :003 > query.first.url_count => 17

如何在集成测试中编写用于签署用户的快捷方式?

在这个问题的讨论的启发下,我想为我的集成测试编写一个登录方法。 在我的test_helper.rb我甚至找到了这样一个方法,但它是在ActiveSupport::TestCase类中定义的,我的测试inheritance自ActionDispatch::IntegrationTest 。 所以我复制了方法并将它(在test_helper.rb )放入ActionDispatch::IntegrationTest类中。 但它不起作用,我的测试失败了这条消息: Capybara::ExpectationNotMet: expected “data:,” to include “Study | Word Up” 它实际上从未在浏览器中实际打开应用程序。 所以我的问题是,我可以在集成测试中使用这样的快捷方式,如果是的话,怎么样? 我正在使用带有has_secure_password的构建身份validation和Michael Hartl在他的Railstutorial中显示的机制。 这是我的test_helper.rb : ENV[‘RAILS_ENV’] ||= ‘test’ require File.expand_path(‘../../config/environment’, __FILE__) require ‘rails/test_help’ require ‘minitest/rails’ require ‘minitest/rails/capybara’ require ‘capybara/rails’ require ‘capybara/poltergeist’ class ActiveSupport::TestCase ActiveRecord::Migration.check_pending! fixtures :all # Logs in a test user. def log_in_as(user, options = {}) password = […]

每次都使用设计GETing而不是在Rails 4中进行POST

所以这似乎是一个非常普遍的问题。 我已经梳理了github上的问题跟踪器以及Stackoverflow,但仍未找到解决方案 – 更改config.sign_out_via = :delete to config.sign_out_via = :get – 这显然是非常糟糕的做法。 我的问题是,无论我尝试什么,客户端都会发送一个get请求而不是指定的delete或post 。 在我看来 :delete %> 耙路线给出 Anchor$ rake routes Prefix Verb URI Pattern Controller#Action root GET / home#index new_user_session GET /login(.:format) devise/sessions#new user_session POST /login(.:format) devise/sessions#create destroy_user_session DELETE /logout(.:format) devise/sessions#destroy user_password POST /password(.:format) devise/passwords#create new_user_password GET /password/new(.:format) devise/passwords#new edit_user_password GET /password/edit(.:format) devise/passwords#edit PATCH […]

Rails 4 / postgresql – 根据另一个表数据在表上插入数据(after_create)

在创建模型交易时,我使用after_create在DealPrize表上创建奖品。 Deal和DealPrize属于/ has_many关系:a Deal有许多Deal奖品,Dealprize属于Deal。 它的工作方式如下:在Deal中,我有一个列’prize-number’,我使用了after_create,以便amdin创建一个新的交易evetytime,应用程序获取此prize_number列,并创建此批量的奖品(插入尽可能多的行必要时)在DealPrize表中。 出于性能考虑,奖品数量可以> 500,000并且为了优化INSERT。 我找到了https://www.coffeepowered.net/2009/01/23/mass-inserting-data-in-rails-without-killing-your-performance/ :我选择了选项2(原始SQL和usi_ng’事务) “)。 事实上,最有效的方式(选项3:’单个质量插入’)在piostgresql中不容易获得(这个人提供了SQL的exmaples)并且对于mee来说太难了(它涉及一些COPY命令……)。 所以这是我的代码优化之前(它工作) 车型/ deals.rb after_create :create_deal_prizes def create_deal_prizes self.prizes_number.times do prizes = DealPrize.create(:deal_id => self.id, :admin_user_id => self.admin_user_id) prizes.save end end 所以我没有在PostgreSQL中应用选项2(带有事务的原始SQL),就像这个用于SQL的人一样 这是’我试过的: 车型/ deals.rb after_create :create_deal_prizes def create_deal_prizes Deal.transaction do self.prizes_number.times do |i| DealPrize.connection.execute “INSERT INTO ‘deal_prizes’ (deal_id) values (self.deal.id)” end end end 但它失败了,我收到错误: […]

通过数据库级​​外键维护数据库完整性

作为rails的新手,我有点惊讶的是rails migration / ActiveRecord没有为has_many , has_one和其他关系创建数据库级外键。 从搜索主题可以清楚地看出,这是轨道方式。 我在“ 使用Rails 4的敏捷Web开发 ”一书中找到了一个示例,该示例使用了第110页的以下示例。 class Product < ActiveRecord::Base has_many :line_items before_destroy :ensure_not_referenced_by_any_line_item … private # ensure that there are no line items referencing this product def ensure_not_referenced_by_any_line_item if line_items.empty? return true else errors.add(:base, 'Line Items present') return false end end end 这个例子让我感到畏缩,因为ensure_not_referenced_by_any_line_item正是程序员忘记添加的东西。 此外,在我看来,它需要更多的代码行,意味着更多的错误,等等。 我在同一主题上找到了这个超过五年的post 。 我也发现了外国人gem 。 我的问题是关于铁路的当前状况。 […]

如何在rails应用程序的后台监听AWS SQS消息?

我想在rails应用程序的后台异步轮询消息。 Shoryuken不起作用,因为我希望我的rails应用程序也能监听传入的HTTP请求。