天道酬勤,学无止境

ruby-on-rails

Rails ActiveRecord: Missing column in grouping query

问题 Key.select('products.name as product, product_groups.name as product_group, AVG(keys.cost) as cost') .group('products.id, product_groups.id') .left_joins(:product,:product_group) 结果: => #<ActiveRecord::Relation [#<Key id: nil, cost: 0.6e1>, #<Key id: nil, cost: 0.4e1>]> 预期返回 3 字段,但返回值:2 字段。 I found the solution. The detail areas in the console did not appear as HASH. 回答1

2022-07-11 09:59:46    分类:技术分享    ruby-on-rails   ruby   activerecord

Rails ActionCable Connection(Server) with NodeJs(Client)

问题 我想在 Rails ActionCable之间创建一个连接,它将充当Server和NodeJs作为Client 。 这是我在connection.rb文件中的代码。 # app/channels/application_cable/connection.rb module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :uuid def connect self.uuid = SecureRandom.uuid end end end 这是我频道的代码。 # app/channels/socket_connection_channel.rb class SocketConnectionChannel < ApplicationCable::Channel def subscribed stream_from "socket_connect" end def speak ActionCable.server.broadcast("socket_connect", message: "Connected") end def unsubscribed # Any cleanup needed when channel is unsubscribed end end

2022-05-17 04:28:04    分类:技术分享    ruby-on-rails   node.js   websocket   client-server   actioncable

Rails 3/Devise confirmation email server settings

问题 我有一个 Rails 3 应用程序,我正在使用 Devise 进行用户身份验证。 如何指定一个应用程序范围的 SMTP 服务器供 Devise 使用? 我在 /config/environments/development.rb 中输入了以下内容(Apache2 设置为 8080) config.action_mailer.default_url_options = { :host => 'mydomain.com:8080' } 关于如何让外发邮件与 Devise 和 Rails 3 一起使用的任何想法? 回答1 回答2

2022-05-17 03:38:15    分类:技术分享    ruby-on-rails   devise   actionmailer

Ruby on Rails: Why a select box does not show the current object value?

问题 以下是来自views/products/edit.html.erb的相关代码: <%= form_for(:product, :url => {:action => 'update', :id => @product.id}) do |f| %> <%= render(:partial => "form", :locals => {:f => f}) %> <%= submit_tag("Update Product") %> <% end %> 来自views/products/_form.html.erb : <%= select_with_new_option(f, :shop, :name, :id) %> 并来自helpers/products_helper.rb : def select_options_with_create_new(objects, text_field, value_field, options={}) object = objects.to_s.singularize all_objects = object.capitalize.constantize.all all_objects = all_objects.sort_by(&options[:order_by]) if options.has_key?(:order_by)

2022-05-17 03:01:47    分类:技术分享    ruby-on-rails   forms   select   ruby-on-rails-3

Advice on how to send email to multiple users based on an association

问题 我创建了一个 Ruby on Rails 应用程序,用户可以在其中跟踪锻炼情况。 可以私下或公开这样做。 在公开的锻炼(锻炼workout.share == 1 )上,我允许用户发表评论。 当对锻炼创建评论时,会通过电子邮件通知锻炼所有者。 这一切都很好。 我现在正在寻找一些建议,以让对锻炼发表评论的用户也可以通过电子邮件收到通知。 这是一个例子。 用户 A 创建锻炼 1。用户 B 对锻炼 1 发表评论,用户 A 收到电子邮件通知。 用户 C 还对锻炼 1 发表评论,并且用户 A 和用户 B 都收到电子邮件通知。 告诉我的应用程序遍历所有评论过锻炼 1 的用户并向他们发送电子邮件的最佳方法是什么? 目前,我正在向锻炼所有者发送一封电子邮件,其中包含 comments_controller 中的以下代码(我意识到这可能是更简洁的代码): class CommentsController < ApplicationController ... def create @workout = Workout.find(params[:workout_id]) @comment = @workout.comments.build(params[:comment]) @comment.user = current_user respond_to do |format| if

2022-05-17 02:32:04    分类:技术分享    ruby-on-rails   ruby   email   mailer

rails redirect_to :back not working

问题 我正在尝试使用以下内容: class PaymentsController < ApplicationController def addproduct (session[:products] ||= []) << params[:item] redirect_to :back end end 我得到了这个例外: undefined method `back_url' for #<PaymentsController:0x007ff682c467a8> 为什么会这样? 回答1 Rails 5 有 redirect_back,而不是redirect_to :back 。 它已更改,因为它用于在请求的HTTP_REFERER不存在时引发异常。 所以使用这个: redirect_back fallback_location: root_path 您可以根据需要将root_path更改为其他内容。 回答2 redirect_to :back在 Rails 5.0 中被弃用(参见 PR),然后在 Rails 5.1 中被删除 请改用以下内容: redirect_back(fallback_location: root_path)

2022-05-17 00:56:04    分类:技术分享    ruby-on-rails   ruby   redirect

Collection_select not saving

问题 我正在尝试实现一个集合选择来创建我的模型组和用户之间的关联(加入表:groups_user)。 但是当我使用collection_select 时,这个关联并没有保存。 我完全不知道可能是什么问题 我的代码: 看法 : <%= simple_form_for(group, remote: true) do |f| %> <%= f.collection_select :user_ids, @users.order(:pseudo), :id, :pseudo, {}, {multiple: true} %> <%= f.submit %> <% end %> 和我的控制器(组): def group_params params.require(:group).permit(:name, :user_ids) end 仅供参考,我有一个单独提交关联的操作,它运行良好! 但是当我尝试实现一个集合来集体选择时,它不起作用 回答1 def group_params params.require(:group).permit(:name, :user_ids => []) end

2022-05-16 23:38:19    分类:技术分享    ruby-on-rails   ruby   collection-select

Ruby strftime '%Z' method returns '0545' instead of 'NPT'

问题 将我的 MacOS 升级到最新版本后,Time#strftime 方法出现了一些奇怪的问题。 Time.now.in_time_zone("Kathmandu").strftime("%Z") #=> '+0545' Time.now.in_time_zone("Bangkok").strftime("%Z") #=> '+07' Time.now.in_time_zone("Nairobi").strftime("%Z") #=> 'EAT' Time.now.in_time_zone("New Delhi").strftime("%Z") #=> 'IST' 我目前的红宝石版本是: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] 我试过了: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16] 仍然无法正常工作 我在我朋友的机器上试过这个(ruby 2.4.1p111(2017-03-22 修订版 58053)[x86_64-darwin15])并且工作正常。 Time.now.in_time_zone("Kathmandu").strftime("%Z") #=> 'NPT' Time.now.in_time_zone(

2022-05-16 19:06:12    分类:技术分享    ruby-on-rails   ruby   macos

Rails Perform Tasks Async In Controller

问题 当调用Controller中的路由时,我需要执行三项任务。 现在我的代码看起来像这样(缩写): def set_quotas TaskOne.new().ex TaskTwo.new().ex TaskThree.new().ex quotas = @user.quotas render json: quotas, status: 200, each_serializer: Api::V1::QuotaSerializer end 每个任务按顺序运行。 但是,他们中的一些人会调用外部服务。 因此,完成此呼叫所需的总时间最终为 4-8 秒,我们真的想加快速度。 我想做的是串联运行所有三个任务,但要等到每个任务都完成后再呈现json响应。 在 Rails 中实现这一目标的最佳方法是什么? 回答1 您可以为此使用线程。 这是一个简单的解决方案: def set_quotas [ Thread.new { TaskOne.new().ex }, Thread.new { TaskTwo.new().ex }, Thread.new { TaskThree.new().ex } ].each &:join quotas = @user.quotas render json: quotas, status: 200, each_serializer: Api::V1

2022-05-16 12:16:03    分类:技术分享    ruby-on-rails

What can I use to allow an android app to communicate with a rails app

问题 回答1 这是一个快速演练。 准备基础应用程序 让我们创建一个新的 Rails 应用程序 $ rails new simple-message $ cd simple-message/ 我们现在将创建一个名为 Message 的 RESTful 资源,它将管理来自您的手机的消息。 $ rails generate scaffold Message title:string content:text 创建将包含消息的表: $ rake db:migrate 启动绑定服务器并将浏览器指向 http://0.0.0.0:3000/messages 从那里您可以手动创建新消息,该消息将显示为列表。 您的 API 已经存在 对于您可以使用浏览器导航的每个页面,都有一个相应的视图可以接受来自其他客户端的编程调用。 如果您浏览 http://0.0.0.0:3000/messages.xml,您将获得一个包含所有消息的 xml。 卷曲: $ curl http://localhost:3000/messages.xml <?xml version="1.0" encoding="UTF-8"?> <messages type="array"> <message> <created-at type="datetime">2010-11-27T18:24:36Z</created-at>

2022-05-16 12:09:08    分类:技术分享    android   ruby-on-rails