小编shi*_*ime的帖子

将数组传递给select_tag

我目前将此作为搜索:

 <%= form_tag users_path, :controller => 'users', :action => 'townsearch', :method => 'get' do %>
    <%= select_tag :county, params[:county] %>
    <%= submit_tag 'search'%>
 <% end %>
Run Code Online (Sandbox Code Playgroud)

我的用户模型中有以下列表:

  COUNTY_OPTIONS = [ "Avon", "Bedfordshire", "Berkshire", "Borders", "Buckinghamshire", "Cambridgeshire","Central",
                 "Cheshire", "Cleveland", "Clwyd", "Cornwall", "County Antrim", "County Armagh", "County Down",
                 "County Fermanagh", "County Londonderry", "County Tyrone", "Cumbria", "Derbyshire", "Devon",
                 "Dorset", "Dumfries and Galloway", "Durham", "Dyfed", "East Sussex", "Essex", "Fife", "Gloucestershire", 
                 "Grampian", "Greater Manchester", "Gwent", "Gwynedd County", "Hampshire", "Herefordshire", "Hertfordshire",
                 "Highlands and Islands", "Humberside", "Isle …
Run Code Online (Sandbox Code Playgroud)

select ruby-on-rails

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

为什么Ruby会为私有属性发出警告

以示例类为例:

# in ./example.rb
class Example
  private
    attr_accessor :name
end
Run Code Online (Sandbox Code Playgroud)

当我以详细模式运行它时,Ruby会向我发出警告:

$ ruby -W2 ./example.rb
example.rb:3: warning: private attribute?
Run Code Online (Sandbox Code Playgroud)

为什么不推荐这个?

ruby language-design private

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

排序范围值

我想对表示数值范围的字符串数组进行排序,如下所示:

b = ["0-5", "100-250", "5-25", "50-100", "250-500", "25-50"]
Run Code Online (Sandbox Code Playgroud)

使用sort我得到的方法:

b.sort 
# => ["0-5", "100-250", "25-50", "250-500", "5-25", "50-100"]
Run Code Online (Sandbox Code Playgroud)

我希望它像这样:

["0-5, "5-25", "25-50", "50-100", "100-250", "250-500"]
Run Code Online (Sandbox Code Playgroud)

ruby sorting

8
推荐指数
3
解决办法
357
查看次数

如何获得"超级"的智慧?

假设您正在使用不同的arity覆盖子类中的方法:

class A
  def foo(arg)          # arity is 1
    # doing something here
  end
end

class B < A
  def foo(arg1, arg2)   # arity is 2
    super(arg1)         # <- HERE
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法super在这里获得在线的arity ?

(真实的用例:我正在调用super知道超类不带任何参数.但是,如果超类实现(在gem中)发生变化,我想发出警告.)

谢谢你的帮助!

ruby

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

使用来自机架中间件的参数调用控制器操作

有没有办法可以将参数传递给中间件的控制器动作调用?

这是控制器代码中的操作

# in my_controller.rb
# 
def print_name(name)
    render :text => "Hello, #{name}!"
end
Run Code Online (Sandbox Code Playgroud)

这是我的中间件中调用此操作的代码

# in middleware
#
def call(env)
  env['action_controller.instance'].class.action(:print_name).call(env)
end
Run Code Online (Sandbox Code Playgroud)

这当然会提高ArgumentError.

我不知道如何传递一个参数来action调用.这是来源:

# in action_pack/lib/action_controller/metal.rb
#
def self.action(name, klass = ActionDispatch::Request)
      middleware_stack.build(name.to_s) do |env|
        new.dispatch(name, klass.new(env))
      end
end
Run Code Online (Sandbox Code Playgroud)

如您所见,它从提供的控制器操作返回机架端点.我认为我无法在这里传递论据.

我最终动态更改控制器class_eval,然后从该代理方法调用控制器方法.

# in middleware
#
def define_proxy_method(klass)
      klass.class_eval do
            def call_the_real_method
              print_name(request.env['fake_attribute'])
            end
      end
 end

def call(env)
  define_proxy_method(env['action_controller.instance'].class)
  env['fake_attrbute'] = "Yukihiro"
  env['action_controller.instance'].class.action(:call_the_real_method).call(env)
end
Run Code Online (Sandbox Code Playgroud)

这看起来很脏,我想知道更好的方法.谢谢.

ruby rack ruby-on-rails

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

ruby函数中'end +'的含义是什么?

这是ruby函数:

def long_reference_name
  if suite?
    "#{recursive_access} #{recursive_view} "
  else
    ""
  end + reference_name
end
Run Code Online (Sandbox Code Playgroud)

我不明白其含义是什么:

end + reference_name

ruby

4
推荐指数
1
解决办法
119
查看次数

VIM宏编辑

假设我已经记录了一个包含许多命令和特殊字符的长宏.赔率是我在某处犯了错误:)如何编辑宏,纠正错误并再次保存?

例如:

我希望复制一行,然后将其中的数字增加一.

这是宏

yyp/\d<C-A>
Run Code Online (Sandbox Code Playgroud)

但它被保存为

yyp/\d^M^A
Run Code Online (Sandbox Code Playgroud)

粘贴寄存器时,我看不到这个特殊字符.当我希望复制寄存器时,我还必须使用'let',因为标准粘贴到屏幕并复制到另一个寄存器不起作用.如何有效地编辑特殊字符的注册?

谢谢

vim macros

3
推荐指数
1
解决办法
1294
查看次数

在视觉选择上使用Ack.vim

目前我在我的这个映射 ~/.vimrc

noremap <Leader>a :Ack <cword><cr>
Run Code Online (Sandbox Code Playgroud)

这使我能够在光标下搜索一个单词.

我想搜索当前的视觉选择,因为有时单词是不够的.

有没有办法可以发送视觉选择ack.vim

vim ack

3
推荐指数
1
解决办法
1091
查看次数

不区分大小写的Postgres查询包含数组

我有包含这样的标签数组的记录:

   id   |                     title                     |       tags
--------+-----------------------------------------------+----------------------
 124009 | bridge photo                                  | {bridge,photo,Colors}
 124018 | Zoom 5                                        | {Recorder,zoom}
 123570 | Sint et                                       | {Reiciendis,praesentium}
 119479 | Architecto consectetur                        | {quia}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下SQL查询来按标签获取特定记录('bridge','photo','Colors'):

SELECT  "listings".* FROM "listings" WHERE (tags @> ARRAY['bridge', 'photo', 'Colors']::varchar[]) ORDER BY "listings"."id" ASC LIMIT $1  [["LIMIT", 1]]
Run Code Online (Sandbox Code Playgroud)

这将返回此表中的第一条记录.

这样做的问题是,我有混合型的情况下,我想,如果我搜索到返回相同的结果:bridge,photo,colors.基本上我需要使这个搜索不区分大小写,但无法找到与Postgres这样做的方法.

这是我尝试过的SQL查询,它会抛出错误:

SELECT  "listings".* FROM "listings" WHERE (LOWER(tags) @> ARRAY['bridge', 'photo', 'colors']::varchar[]) ORDER BY "listings"."id" ASC LIMIT $1
Run Code Online (Sandbox Code Playgroud)

这是错误:

PG :: UndefinedFunction:错误:函数lower(字符变化[])不存在
提示:没有函数匹配给定的名称和参数类型.您可能需要添加显式类型转换.

arrays postgresql

3
推荐指数
2
解决办法
935
查看次数

使用分而治之的方法找到数字的第n个根

我需要有关如何获得某个数字的第n个根的帮助.

用户输入他想要root的数字n和数字.我需要在没有cmath lib和分而治之的方法下解决这个问题.

这是我的代码还没有工作:

#include<iostream>
using namespace std;

float pow(float a,float c){
    if (a == 0)
        return 0;
    else if(a == 1)
        return 1;
    else{
        float p = pow(a,(c/2));
        if(c%2)
            return p*p*a;
        else
            return p*p;
    }
}

int main(){
    float a,b;
    float c;
    cout << "Enter positive number:(base)" << endl;
    do{
        cin >> a;
    }while (a < 0);
    cout << "Enter number: (root)" << endl;
    cin >> b;
    c = 1/b;
    cout << "Result:"<<pow(a,c) << endl;
    system("pause");
    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm cmath divide-and-conquer

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

旋转阵列直到满足条件

我知道如何实现这一目标,但它似乎不是红宝石的做法.

我有一周的天数:

DAYS = {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday"}
Run Code Online (Sandbox Code Playgroud)

(可能有一些铁路助手为此,但我已经用我能想到的最快的方式实现了它)

现在我想创建一个数组,其中第一个元素是今天,其他日子应该保持有序.

这是这个数组

 def day_keys
    # proper sorting of days, start with today and then continue
    day_array = (1..7).to_a
    loop do
      break if day_array.first == Time.now.wday
      day_array.rotate!
    end
    day_array
  end
Run Code Online (Sandbox Code Playgroud)

今天是星期五,所以它会回来[5,6,7,1,2,3,4].在此之后,我使用DAYS散列中的键映射此数组中的值以查找日期名称.

解决方案对我来说似乎很粗糙,所以我想听听一些关于如何实现这一点的想法.我花了一些时间看Array#cycleEnumerable#inject,但似乎没有适合我的需要.

ruby ruby-on-rails

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