标签: ruby-on-rails-5

从ActiveRecord的结果集中删除重复项

我有这个要求:

res = Model1.joins(:items).where(items: {id: [1, 2, 3]})
Run Code Online (Sandbox Code Playgroud)

它返回带有重复项的数据,尽管数据库中没有重复项.如何删除重复项res

ruby ruby-on-rails ruby-on-rails-5

0
推荐指数
1
解决办法
1025
查看次数

Ruby on Rails:ratyrate gem表已经存在吗?

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

ruby-on-rails rails-migrations ruby-on-rails-5

0
推荐指数
1
解决办法
671
查看次数

在构建全局自动完成搜索时,如何在搜索栏中修复未定义的方法`form_with'?

尝试在我的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)

search jquery ruby-on-rails ransack ruby-on-rails-5

0
推荐指数
1
解决办法
1679
查看次数

Rails 5-在更新时手动将属性添加到控制器中的参数

我试图在完成表单后手动向控制器中的参数添加其他属性。参数似乎包裹在中,这似乎阻止了我更改参数。

控制器:

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)

ruby-on-rails actioncontroller ruby-on-rails-5

0
推荐指数
2
解决办法
4306
查看次数

如何在Rails 5.1.4中添加我的参数?

我有以下代码用于在我的网站上对表格进行排序.它正在努力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

ruby hash ruby-on-rails strong-parameters ruby-on-rails-5

0
推荐指数
1
解决办法
323
查看次数

如何在不保存的情况下更新尚未保存的对象?

所以我这样做:

@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对象的情况下更新实例呢?

谢谢.

ruby ruby-on-rails ruby-on-rails-5

0
推荐指数
2
解决办法
77
查看次数

如何在Rails中的多个对象之间求和两个值的乘积?

想象一下,我有一个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 …

ruby ruby-on-rails ruby-on-rails-5

0
推荐指数
1
解决办法
155
查看次数

Factorybot无法识别任何属性-“缺少方法”错误

我最近升级了许多宝石,从那时起,我无法运行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)

ruby-on-rails ruby-on-rails-5 factory-bot

0
推荐指数
1
解决办法
214
查看次数

如何理解“ ActiveRecord :: Migration [5.2]” rails / ruby

  • ActiveRecord 是一类
  • ActiveRecord::Migration 是一个模块
  • [5.2] 是一个数组 Float

但是什么意思ActiveRecord::Migration[5.2]呢?

ruby ruby-on-rails ruby-on-rails-5

0
推荐指数
1
解决办法
44
查看次数

如何构造查询来检查关系是否存在

我正在构建一个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 ruby-on-rails-5

0
推荐指数
1
解决办法
43
查看次数