我有这个要求:
res = Model1.joins(:items).where(items: {id: [1, 2, 3]})
Run Code Online (Sandbox Code Playgroud)
它返回带有重复项的数据,尽管数据库中没有重复项.如何删除重复项res?
我正在使用Rails 5,并且已经安装了gem并尝试运行迁移,但是却出现此错误:
Index name 'index_rates_on_rater_id' on table 'rates' already exists
有人知道为什么会这样吗?这是一个新站点,并且刚刚开始添加devise gem。
这是在执行时无法完成的迁移文件 rails db:migrate
class CreateRates < ActiveRecord::Migration[5.1]
def self.up
create_table :rates do |t|
t.belongs_to :rater
t.belongs_to :rateable, :polymorphic => true
t.float :stars, :null => false
t.string :dimension
t.timestamps
end
add_index :rates, :rater_id
add_index :rates, [:rateable_id, :rateable_type]
end
def self.down
drop_table :rates
end
end
Run Code Online (Sandbox Code Playgroud) 尝试在我的rails应用程序中跨多个模型运行全局自动完成搜索并利用easy-autocomplete jquery库以及用于搜索的ransack gem时,我收到一个奇怪的错误.
具体来说,我相信错误是在我的导航栏页面中,因为当我尝试运行查询时出现此错误 - undefined method form_with for #<#<class:0x007f875a6f8b58>:0x007f87600e0aa8>
我决定劈开并切换form_tag for form_tag然后我在下面的行上得到一个错误我在下面undefined method text_field for nil:NilClass"列出了所有相关代码.非常感谢你的帮助.
Main_Controller.rb
class MainController < ApplicationController
def index
end
def search
@movies = Movie.ransack(name_cont: params[:q]).result(distinct: true)
@directors = Director.ransack(name_cont: params[:q]).result(distinct: true)
respond_to do |format|
format.html {}
format.json {
@movies = @movies.limit(5)
@directors = @directors.limit(5)
}
end
end
end
Run Code Online (Sandbox Code Playgroud)
_navbar.html.erb
<%= form_with url: search_path, local: true, method: :get, html: { class: "form-inline my-2 my-lg-0" } do |form| %>
<%= form.text_field :q, placeholder: "Search", …Run Code Online (Sandbox Code Playgroud) 我试图在完成表单后手动向控制器中的参数添加其他属性。参数似乎包裹在中,这似乎阻止了我更改参数。
控制器:
class ActualsController < SignedInController
...
def update
respond_to do |format|
facesheet = actual_params[:facesheet]
#trying to manually add attribute
actual_params.merge(:file_name => 'ted.png')
new_params = actual_params.except(:facesheet)
if @actual.update(new_params)
format.html { redirect_to action: 'show', id:@actual.id, notice: 'Actual was successfully updated.' }
format.json { render :show, status: :ok, location: @actual }
else
format.html { render :edit }
format.json { render json: @actual.errors, status: :unprocessable_entity }
end
end
end
...
end
Run Code Online (Sandbox Code Playgroud)
控制台中的“ new_params”
<ActionController::Parameters {"encounter_type_id"=>"1", "physician_id"=>"669", "insurance_id"=>"1182", "time_start"=>"05:00", "time_end"=>"07:00", "date_start"=>"2017-08-02", "date_end"=>"2017-08-02", "facility_id"=>"1", "med_rec_num"=>"1244", …Run Code Online (Sandbox Code Playgroud) 我有以下代码用于在我的网站上对表格进行排序.它正在努力Rails 4.2,但升级到Rails 5.1.4它失败了.正如我在Rails 5的变化中所读到的那样.虽然我理解由于它的变化而破坏但我仍然不明白如何调整这种方法以使其再次工作,如果有人可以,我会非常感激告诉我并解释一下.谢谢!
def roster_sort_link(column, title = nil)
title ||= column.titleize
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
icon = sort_direction == "asc" ? "glyphicon glyphicon-chevron-up" : "glyphicon glyphicon-chevron-down"
icon = column == sort_column ? icon : ""
link_to "#{title} <span style='font-size: 10px;' class='#{icon}'></span>".html_safe, params.merge({column: column, direction: direction})
end
Run Code Online (Sandbox Code Playgroud)
该问题出现在该方法的最后一行,其中指出:
params.merge({column: column, direction: direction})
我得到的错误如下:
unable to convert unpermitted parameters to hash
所以我这样做:
@portfolio = current_user.portfolio
@port_stock = PortStock.new(port_stock_params)
stock = Stock.find(port_stock_params[:stock_id])
@port_stock.update!(current_price: stock.price)
respond_to do |format|
if @port_stock.save
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我打电话时.update!,@port_stock它实际上会在@port_stock.save以后保存记录.
所以我的回调正在执行两次,这会弄乱我的数据库中的东西.
那么在我明确地调用它之前如何new在@port_stock.current_price不实际保存@port_stock对象的情况下更新实例呢?
谢谢.
想象一下,我有一个p有2股票的投资组合port_stocks.我想要做的是对每个进行计算port_stock,然后总结所有结果.
[60] pry(main)> p.port_stocks
=> [#<PortStock:0x00007fd520e064e0
id: 17,
portfolio_id: 1,
stock_id: 385,
volume: 2000,
purchase_price: 5.9,
total_spend: 11800.0>,
#<PortStock:0x00007fd52045be68
id: 18,
portfolio_id: 1,
stock_id: 348,
volume: 1000,
purchase_price: 9.0,
total_spend: 9000.0>]
[61] pry(main)>
Run Code Online (Sandbox Code Playgroud)
所以,从本质上讲,使用上面的代码我想这样做:
ps = p.port_stocks.first #(`id=17`)
first = ps.volume * ps.purchase_price # 2000 * 5.9 = 11,800
ps = p.port_stocks.second #(`id=18`)
second = ps.volume * ps.purchase_price # 1000 * 9.0 = 9,000
first + second = 19,800
Run Code Online (Sandbox Code Playgroud)
我想简单地说19,800.理想情况下,我想以非常Ruby的方式做到这一点.
如果我只是简单地总结1中的所有值total_spend …
我最近升级了许多宝石,从那时起,我无法运行Rails服务器,控制台或rspec。
这是我看到的错误日志:
NoMethodError:
undefined method 'name' in 'book' factory
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/definition_proxy.rb:97:in `method_missing'
# ./spec/factories/books.rb:3:in `block (2 levels) in <top (required)>'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:18:in `instance_eval'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:18:in `factory'
# ./spec/factories/books.rb:2:in `block in <top (required)>'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:49:in `instance_eval'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:49:in `run'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:7:in `define'
# ./spec/factories/books.rb:1:in `<top (required)>'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/find_definitions.rb:20:in `block (2 levels) in find_definitions'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/find_definitions.rb:19:in `each'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/find_definitions.rb:19:in `block in find_definitions'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/find_definitions.rb:15:in `each'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/find_definitions.rb:15:in `find_definitions'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.0.2/lib/factory_bot/reload.rb:6:in `reload'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot_rails-5.0.2/lib/factory_bot_rails/reloader.rb:25:in `block in build_reloader'
# /Users/regan/.rvm/gems/ruby-2.6.3/gems/factory_bot_rails-5.0.2/lib/factory_bot_rails/reloader.rb:35:in `block in register_reloader'
# …Run Code Online (Sandbox Code Playgroud) ActiveRecord 是一类 ActiveRecord::Migration 是一个模块 [5.2] 是一个数组 Float 但是什么意思ActiveRecord::Migration[5.2]呢?
我正在构建一个Rails 5应用程序。在这个应用程序中,我得到了一个用户模型和一个订阅模型。我希望能够获得所有拥有有效订阅的用户。
用户
has_one:订阅
- id,
- name
- email
Run Code Online (Sandbox Code Playgroud)
订阅
当属:用户
- id
- user_id
- title
- active (boolean)
Run Code Online (Sandbox Code Playgroud)
我需要能够进行如下查询(如下)。换句话说,我需要找到所有不仅获得订阅而且还将active属性设置为true的用户。
User.with_active_subscriptions
Run Code Online (Sandbox Code Playgroud)
我想我可能需要做一个示波器,但不知道如何做。
ruby-on-rails ×10
ruby-on-rails-5 ×10
ruby ×5
factory-bot ×1
hash ×1
jquery ×1
ransack ×1
search ×1