小编Jac*_*ham的帖子

PG :: GroupingError:错误:列"events.id"必须出现在GROUP BY子句中或用于聚合函数

事件有一列popularity和许多关键字.关键字具有类别和名称.我试图通过它们的受欢迎程度来命令事件,但是只返回每个关键字名称中最受欢迎的事件和"分类法"类别.

这是我的查询:

Event
  .order(:popularity)
  .joins(:keywords)
  .where(keywords: {category: "taxonomy"})
  .group("keywords.name")
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误:

PG :: GroupingError:错误:列"events.id"必须出现在GROUP BY子句中或用于聚合函数

我哪里错了?

activerecord ruby-on-rails

7
推荐指数
1
解决办法
2954
查看次数

Rails&Devise:设计未在rails控制台中显示的特定列

我试图在我的用户模型上使用Devise但是当我进入rails控制台并尝试User.new我只得到:

irb(main):002:0> User.new
=> #<User id: nil, first_name: nil, last_name: nil, email: nil, created_at: nil, updated_at: nil>
Run Code Online (Sandbox Code Playgroud)

为什么设计专栏没有出现?

CreateUsers迁移:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :first_name
      t.string :last_name
      t.string :email


      t.timestamps null: false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

AddDeviseToUsers迁移:

class AddDeviseToUsers < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise

7
推荐指数
1
解决办法
954
查看次数

Rails&Devise:失败的注册尝试重定向到根URL

当用户注册尝试失败时,我的应用会将其重定向到根网址,而不是呈现注册页面.

路线:

resources :users
  devise_for :users, path: '', path_names: { sign_up: 'register', sign_in: 'login', sign_out: 'logout'}, :controllers => { :omniauth_callbacks => "callbacks" }
Run Code Online (Sandbox Code Playgroud)

注册#新:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), :html => {:class => "col s12 form-text", autocomplete: "off"}) do |f| %>

  <%# render 'devise/errors', resource: resource %>
  <div class="row">
    <div class="input-field col s12">
      <%= f.text_field :full_name, :class => "validate", :required => true, :placeholder => "Robin Smith" %>

      <%# f.label :full_name, :class => "allcaps active", :data => {:error => 'Name …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise

7
推荐指数
1
解决办法
703
查看次数

在移动设备中使用document.execCommand('copy')

有没有办法复制到移动剪贴板?我已经研究了几天但没有找到一个好的解决方案.Clipboard.js似乎不适用于移动设备,给我一个错误"没有支持:("

我目前正在使用以下功能:

function copytext(text) {
    var textField = document.createElement('textarea');
    textField.innerText = text;
    document.body.appendChild(textField);
    textField.select();
    document.execCommand('copy');
    textField.remove();
}
Run Code Online (Sandbox Code Playgroud)

在我的桌面上像chrome上的魅力一样工作.但在Chrome手机上,没有任何东西被复制.

那里有解决方案吗?

javascript clipboard.js

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

在rails中使用Ajax时传递Form对象

我有一个复杂的调查表格.一项调查

belongs_to :template
has_many :questions, :through => :template
has_many :answers, :through => :questions
Run Code Online (Sandbox Code Playgroud)

即用户创建新调查,他必须选择调查模板.调查模板将创建一些默认问题和答案字段.

<%= form_for @survey do |f| %>

  <p>Select a template:</p>
  <%= render @templates, :locals => {:patient => @patient }, :f => f %>

<% end %>
Run Code Online (Sandbox Code Playgroud)

然后我渲染_templates部分,我仍然可以访问表单对象.从这里开始,用户可以点击模板名称,模板问题和答案将通过Ajax呈现.

<% @templates.each do |template| %>

  <div class="thumbnail">
    <%= link_to template.name,
                { :controller => "surveys",
                  :action => "new",
                  :template_id => template.id,
                  :patient_id => nil,
                  :f => f,
                  :remote=> true },
                :class=> "template", :id=> template.id %>
  </div>

<% end %> …
Run Code Online (Sandbox Code Playgroud)

javascript forms ajax ruby-on-rails

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

Kaminari:Array的未定义方法`total_pages'

使用Rails和Kaminari gem,我在渲染视图时遇到以下错误:

#Array的未定义方法`total_pages':0x007faa486583e0

控制器:

def index
    @user = current_shop.users.new
    @users = current_shop.active_users   ### This returns an array
    Kaminari.paginate_array(@users).page(params[:page]).per(10)
 end
Run Code Online (Sandbox Code Playgroud)

视图:

     <tbody>
       <%= paginate @users %>

        <% @users.each do |user| %>
          <%= render 'user_table_row', :user=> user %>
       <% end %>

     </tbody>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

pagination ruby-on-rails kaminari

5
推荐指数
2
解决办法
5381
查看次数

Shopify Rails App:触发为商店重新安装创建回调

我有一个Shopify应用程序,在创建新商店时运行回调.我刚刚发现了一个错误,当应用程序被卸载,然后重新安装时,回调没有运行,因为商店实际上没有再次创建(我不会在卸载时从我的数据库中删除商店).

class Shop < ActiveRecord::Base
  include ShopifyApp::Shop
  after_create :init_webhooks

   def self.store(session)
    shop = Shop.where(:shopify_domain => session.url).first_or_create({ shopify_domain: session.url, 
                                      :shopify_token => session.token,
                                      :installed => true})
    shop.id
  end

  def self.retrieve(id)
    shop = Shop.where(:id => id).first
    if shop
      ShopifyAPI::Session.new(shop.shopify_domain, shop.shopify_token)
    else
      nil
    end
  end
Run Code Online (Sandbox Code Playgroud)

我可以运行检查以查看shop.installed = false,然后如果它是假的,我可以init_webhooks.但我只是不确定我应该把这个逻辑放在哪里.我不知道放入商店或检索方法是否合适.

我想知道是否有一些我想念的简单.基本上我想运行我的init_webhooks,如果webhooks不存在.

编辑:我尝试了下面的解决方案,将我的回调重构为他们自己的方法,我可以检查是否安装了应用程序然后,如果没有,运行我想要的新安装方法:

def self.retrieve(id)
    shop = Shop.where(:id = id).first
    if shop
      shop.boot
      ShopifyAPI::Session.new(shop.shopify_domain, shop.shopify_token)
    else
      nil
    end
  end

  def boot
    if !installed
      shopify_session
      init_webhooks
      self.installed = true
      self.save!
    end
  end
Run Code Online (Sandbox Code Playgroud)

这似乎适用于全新的安装,但在重新安装时,用户似乎没有进行身份验证(在进入shopify网址后保持重定向到/ login页面)<

ruby-on-rails shopify

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

Redis::CommandError: 达到 ERR 最大客户端数

我收到上述错误并试图获得更多见解。我的应用程序有 3 种类型的后台作业和大约 100 个用户,所以没什么太重的。

我的目标是能够同时处理多个后台作业(因此,如果 10 个用户执行相同的作业,则他们不需要在开始之前等待其他作业完成)。

我很困惑我需要多少 dyno,我需要多少工人,我需要多少 redis 连接。所有这些东西有什么区别?

我目前的设置有:

1 x 专业网络测功机 1 x 专业调度器测功机 3 x 专业工人测功机

和我的档案:

web: bundle exec rails server -p $PORT
scheduler: bundle exec rake resque:scheduler
worker: env TERM_CHILD=1 QUEUE='*' COUNT='3' bundle exec rake resque:workers
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Redis::CommandError: 达到 ERR 最大客户端数

我只是感到惊讶,因为我想要实现的目标似乎非常简单。

ruby-on-rails heroku resque redis

5
推荐指数
0
解决办法
1835
查看次数

Rails:用于跟踪会话不一致的Javascript

我的Rails应用程序中有一些JS代码,可以在新会话中向Mixpanel发出跟踪事件.

从理论上讲,在任何其他事件被触发之前,我应该首先看到"新会话"事件.但在一些访问中,我没有看到"新会议"事件,这意味着它在某些情况下没有被解雇.

以下代码有什么问题?

$(function(){
  var currentLocation = window.location.hostname;
  var lastLocation = document.referrer;
  if (lastLocation.indexOf(currentLocation) > -1) {
  } else {
    mixpanel.track("New Session", {});
  }
  mixpanel.track("Page View", {});
});
Run Code Online (Sandbox Code Playgroud)

javascript ruby-on-rails mixpanel

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

Rails:没有通过表的自引用父/子层次结构

我有一个带有parent_iddate属性的事件模型:

Event.rb

has_many :children, :class_name => "Event"
belongs_to :parent, :class_name => "Event" 
Run Code Online (Sandbox Code Playgroud)

我没有问题event.parentevent.children.儿童事件本身从未有过孩子.

我正在尝试为此模型添加一个范围,以便我可以为每个父项返回最近的日期.就像是:

scope :future, -> {
    where("date > ?", Date.today)
  }

scope :closest, -> {
    group('"parent_id"').having('date = MAX(date)')
 }

Event.future.closest ==> returns the closest child event from every parent
Run Code Online (Sandbox Code Playgroud)

但上述:closest范围是每个父母返回一个以上的孩子.

activerecord ruby-on-rails

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