小编dia*_*ks2的帖子

Ruby正则表达式 - gsub只捕获组

我不太清楚我是否理解非捕获组的工作原理.我正在寻找一个正则表达式来产生这个结果:5.214.我认为下面的正则表达式可行,但它正在取代包括非捕获组在内的所有内容.如何编写正则表达式才能替换捕获组?

"5,214".gsub(/(?:\d)(,)(?:\d)/, '.')
# => ".14"
Run Code Online (Sandbox Code Playgroud)

我想要的结果:

"5,214".gsub(some_regex)
#=> "5.214
Run Code Online (Sandbox Code Playgroud)

ruby regex

20
推荐指数
4
解决办法
2万
查看次数

设置包含特殊字符$的Heroku配置变量

我试图设置一个包含特殊字符的Heroku配置变量,$但我不知道如何正确地逃避它.我尝试将其封装在引号中,但得到了相同的结果.

例:

heroku config:set EMAIL_PASSWORD=xxxxx$xxxxxxxx
=> EMAIL_PASSWORD: xxxxx

heroku config:set EMAIL_PASSWORD="xxxxx$xxxxxxxx"
=> EMAIL_PASSWORD: xxxxx
Run Code Online (Sandbox Code Playgroud)

heroku environment-variables heroku-toolbelt

9
推荐指数
1
解决办法
4819
查看次数

如何重置Heroku Rails4资产管道缓存

根据Heroku 文档:

Heroku现在缓存50mb的tmp/cache/assets,这是资产管道的缓存目录,用于存储中间文件.这意味着未来的资产编译将更快,因为不必重新计算这些文件.

我的问题是如何手动重置或删除此缓存,以便我的所有资产都必须再次预编译?我尝试过heroku run console,Rails.cache.clear但它没有用.我想重置缓存的原因是我已经更改了config.action_controller.asset_host我的production.rb文件,但由于缓存,Heroku没有接受更改.

caching ruby-on-rails heroku ruby-on-rails-4

9
推荐指数
2
解决办法
8549
查看次数

Ruby on Rails - 将变量传递给部分内部的部分

我通过:collection选项将一个集合(@feed_items)传递给_feed_item部分.在_feed_item部分内部,我想渲染另一个部分_like_button.在_like_button partial中,我希望能够访问集合的特定成员.我应该从_feed_item部分传递到_like_button部分?

 @feed_items = current_user.user_feed.order("id DESC").limit(5)
Run Code Online (Sandbox Code Playgroud)

_feed.html.erb

 <%= render partial: 'shared/feed_item', collection: @feed_items %>
Run Code Online (Sandbox Code Playgroud)

_feed_item.html.erb

 <%= render 'likes/like_button', ????? %>
Run Code Online (Sandbox Code Playgroud)

_like_button.html.erb

 <% if like = current_user.likes.find_by_feed_id(feed_item.id) %>
Run Code Online (Sandbox Code Playgroud)

编辑

根据以下答案传递局部变量:

 <%= render :partial => 'likes/like_button', :locals =>{:feed_item => feed_item} %>
Run Code Online (Sandbox Code Playgroud)

但是,在提交之后,我正在ActionView::Template::Error (undefined local variable or method 'feed_item'尝试通过ajax再次呈现表单.如何通过ajax调用再次传递局部变量?

调节器

class LikesController < ApplicationController
  def create
    @like = Like.create(params[:like])
    @feed = @like.feed
    render :toggle
  end

  def destroy
    like = Like.find(params[:id]).destroy
    @feed = …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails partial-views ruby-on-rails-3

8
推荐指数
1
解决办法
1万
查看次数

Rails - 使用paypal-recurring gem处理PayPal IPN回调

我正在使用paypal-recurring gem来处理Rails应用程序中的定期付款.我的大部分代码来自这个优秀的Railscast,但我还想添加一个payment_notification模型来接受IPN回调并存储任何相关数据.这个Railscast讨论了如何设置通知.但是,我很难搞清楚如何将paypal重复出现的宝石IPN回调发送到我的PaymentNotification模型.

如何设置:ipn_url以正确地将IPN回调写入我的PaymentNotification模型.到目前为止我尝试了以下内容:

1)添加ipn_url: "http://my-app-name.com/payment_notifications"到流程方法(在选项下)或payment_notifications_url

2)尝试在此GitHub问题页面底部建议的解决方案

3)使用Paypal的即时付款通知(IPN)模拟器发送到"http://my-app-name.com/payment_notifications",但我收到一个错误:IPN传递失败.HTTP错误代码401:未经授权

编辑

我已经能够成功模拟IPN到我的payments_notifications_url的交付.现在我只需要弄清楚如何指出定期发送的gem将ipn发送到那里.

任何指针都将非常感激.以下是我目前的一些代码.如果我忘记了任何相关部分,请告诉我.

PaypalPayment模型

 class PaypalPayment
   def initialize(subscription)
     @subscription = subscription
   end

   def checkout_details
     process :checkout_details
   end

   def checkout_url(options)
     process(:checkout, options).checkout_url
   end

   def make_recurring
     process :request_payment
     process :create_recurring_profile, period: :monthly, frequency: 1, start_at: Time.zone.now
   end

   def cancel_recurring
     process :cancel
   end

 private

   def process(action, options = {})
     options = options.reverse_merge(
       token: @subscription.paypal_payment_token,
       payer_id: @subscription.paypal_customer_token,
       description: @subscription.plan.name,
       amount: @subscription.plan.monthly_price,
       currency: "JPY"
     )
     response = …
Run Code Online (Sandbox Code Playgroud)

paypal ruby-on-rails paypal-ipn ruby-on-rails-3

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

Rails Ajax - 在一个动作中呈现多个响应

我的rails应用程序中有一个ajax请求,它从我的控制器操作返回一个变量.在控制器动作中,我有一个循环,可能需要一些时间才能通过.

调节器

def myAction
  $j = 1 
  until $j > list_size do
    array <<  {  :foo => $j }   
    $j +=1;
  end  
  @myvariable = array.to_json
end
Run Code Online (Sandbox Code Playgroud)

myAction.js.erb

 var myVariable = JSON.parse("<%= escape_javascript(raw @myvariable) %>");
 for (var k = 0; k < myVariable.length; k++) {
   $("#myDiv").append(myVariable[k].foo);
 }
Run Code Online (Sandbox Code Playgroud)

我希望能够将循环的每个阶段的结果呈现给js.erb partial而不是等待循环完成.这是否可以在不中断循环并在循环结束之前提前结束动作的情况下实现?也许是这样的(伪代码是错误的):

调节器

def myAction
  $j = 1 
  until $j > list_size do
    array <<  {  :foo => $j }   
    render array.to_json
    $j +=1;
  end  
end
Run Code Online (Sandbox Code Playgroud)

myAction.js.erb

 var myVariable = JSON.parse("<%= escape_javascript(raw @myvariable) %>"); …
Run Code Online (Sandbox Code Playgroud)

javascript ajax ruby-on-rails

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

Ruby - 找到散列中最大值的键(s)

我有一个哈希,我想返回哈希值的最大值的键(或键/值对).因此,如果只有一个真正的最大值,它将返回该一个键; 但是,如果有多个具有相同值的键/值对,则它将返回所有这些键.我怎样才能在Ruby中实现这一目标?

my_hash.max_by {|k,v| v} #only returns one key/value pair
Run Code Online (Sandbox Code Playgroud)

ruby hash max

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

在Rails中对Globalize3表进行简单搜索

我想在Ruby on Rails上使用globalize3 gem时实现一个简单的搜索功能.由于模型的转换存储在单独的表中,因此下面的代码不起作用,因为products表中不再有:name字段.如何调整下面的代码以使搜索功能正常?

products_controller.rb

 @products = Product.search(params[:search]).all
Run Code Online (Sandbox Code Playgroud)

index.html.erb

 <%= form_tag products_path, method: :get do %>   
   <%= text_field_tag :search, params[:search] %>
   <%= submit_tag "Search", name: nil %>      
 <% end %>
Run Code Online (Sandbox Code Playgroud)

模型

class Product < ActiveRecord::Base
  translates :name
  attr_accessible :name, :price, :released_at

  def self.search(search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

search ruby-on-rails ruby-on-rails-3 globalize3

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

查找更快的ActiveRecord查询(Ruby on Rails)

我有一个按特定顺序排序的模型.我的目标是从模型中找到一条记录,其中所有先前记录的特定列的总和等于某个数字.下面的例子告诉我我需要的东西,但它非常慢,特别是对于一个相当大的表.有没有更快的方法来解决product.id所有以前产品的积分总和= 100000?

 total_points = 0
 find_point_level = 100000
 @products = Product.order("id").all
 @products.each do |product|
    total_points = product.points + total_points
    @find_product = product.id
    break if total_points >= find_point_level
 end
Run Code Online (Sandbox Code Playgroud)

更新

以下是一些解决方案的一些时间.这通过大约60,000条记录.时间适用于ActiveRecord.

原始示例(上图):
2685.0ms
1238.8ms
1428.0ms

使用find_each的原始示例:
799.6ms
799.4ms
797.8ms

创建一个总和的新列:
181.3ms
170.7ms
172.2ms

ruby performance ruby-on-rails ruby-on-rails-3

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

以下过程出错:解压.pptx -&gt; 修改内容 -&gt; 重新压缩为.pptx

我正在尝试解压缩 Microsoft Office 文件(.docx 和 .pptx),修改一些内容,然后重新压缩为新的 .docx 或 .pptx 文件。

我成功地使用 .docx 文件执行此操作:

1)$ unzip .../test.docx

2)修改document.xml文件中的部分内容

3)$ zip -r rezipped.docx *

使用上述过程,我可以在 Microsoft Word 中成功打开新文档 (rezipped.docx) 并查看更改的内容。

然后我对 .pptx 尝试了相同的过程,但没有成功。

1)$ unzip .../test.pptx

2)修改slide1.xml文件中的一些内容
例如简单的文本更改<a:t>Hello World</a:t><a:t>Hi World</a:t>

3)$ zip -r rezipped.pptx *

当我尝试在 Microsoft PowerPoint 2008 for Mac 版本 12.0 中打开 rezipped.pptx 时,收到以下错误消息:

访问 Macintosh rezipped.pptx 时出错

但是,我可以在 Keynote 中打开该文件,没有任何问题。

我尝试了相同的实验,但我只修改了docProps文件夹中的一个文件(即 app.xml 或 core.xml),并且我能够重新压缩它并在 Microsoft PowerPoint …

xml powerpoint openxml

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