Tag:

ruby on rails使用&阻止sytax:

所以说我有一个问题模型和一个答案模型和问题has_many答案(这是一个多项选择题)。 假设问题是Question对象的集合。 为了收集所有答案,我可以这样做: questions.collect(&:answers) 两个问题: 这种语法到底意味着什么? 是否扩展到 questions.collect { |q| q.answers } 或者还有其他什么东西在这里? 有办法吗? questions.collect { |q| q.answers.shuffle } 使用相同的语法? collect(&:answers.shuffle) 没有这样做。 我似乎无法在网上的ruby块教程中找到这个并且搜索它不起作用(搜索引擎忽略“&:”)。 我在一些inheritance的代码中找到了它。 谢谢

Rails的concat方法和带有do … end的块不起作用

我刚刚阅读了Rails的concat方法来清理输出内容的助手http://thepugautomatic.com/2013/06/helpers/ 。 我玩了它,我发现,它对带有花括号的块和带有do … end的块没有同样的反应。 def output_something concat content_tag :strong { “hello” } # works concat content_tag :strong do “hello” end # doesn’t work concat(content_tag :strong do “hello” end) # works, but doesn’t make much sense to use with multi line blocks end 我不知道花括号和做…结束块似乎有不同的含义。 有没有办法使用concat with do … end 而不用括号括起来(第3个例子)? 否则它在某些情况下似乎没用,例如,当我想在其中连接UL时,其中包含许多LI元素,因此我必须使用多行代码。

将块传递给rails3中的标签助手

我想用一些嵌套元素创建标签标签。 我正在使用标签帮助器并尝试将内部html作为块传递,但生成的HTML看起来并不像我预期的那样。 ERB: Span element Inner span HTML输出: Span element Inner span Span element Inner span 当我使用标记传递内部html时,输出应该是: ERB: Span element <% raw 'Inner span’ %> HTML输出: Span element Inner span 我想知道这是我的错误或ActionView标签助手中的错误。 对于其他助手,块传递工作正常。 谢谢,Michał

干掉一个帮手:包装form_for并访问本地表单变量

我试图干掉一堆表单代码,这些表单代码在每个表单的末尾出现一组重复的字段。 我写了一个包装form_for rails helper的帮助器。 但是我开始迷失在飞来飞去的所有不同范围…… 我的助手是这样的: def simple_form_helper(record_or_name_or_array, *args, &proc) options = … # overriding some options, not relevant form_for(record_or_name_or_array, *(args < “blah”)) , &proc) # i wish to access &proc and append the call to render # to within &procs scope (to access block local variable) concat render(‘shared/forms/submit’) # this obv does not work […]

在helper中的content_tag内循环并输出content_tags

我正在尝试一个帮助方法,它将输出一个项目列表,如下所示: foo_list( [‘item_one’, link_to( ‘item_two’, ‘#’ ) … ] ) 我在阅读了使用rails 3中的helper输出html之后,就像这样编写了帮助器: def foo_list items content_tag :ul do items.collect {|item| content_tag(:li, item)} end end 但是,如果我这样做,我只是在这种情况下得到一个空的UL: def foo_list items content_tag :ul do content_tag(:li, ‘foo’) end end 我按预期获得了UL和LI。 我已经尝试过将它交换一下: def foo_list items contents = items.map {|item| content_tag(:li, item)} content_tag( :ul, contents ) end 在这种情况下,我得到整个列表,但LI标签是html转义(即使字符串是HTML安全)。 做content_tag(:ul, contents.join(“\n”).html_safe )有效,但我感觉不对,我觉得content_tag应该以块模式工作,并以某种方式收集。

为什么直到Ruby中的这种用法不起作用,而另一种用法呢?

下面的代码给出了一个错误: def bubble_sort(arr) until arr == arr.sort do (arr.count – 1).times do |i| (arr[i], arr[i + 1] = arr[i + 1], arr[i]) if (arr[i] > arr[i + 1]) end end arr end (eval):433:(eval):433:编译错误(SyntaxError) (eval):426:语法错误,意外的kDO_COND,期待kEND(arr.count – 1).times do | i | ^ (eval):433:语法错误,意外的kEND,期待$ end 但下面的另一个变体成功通过。 为什么? def bubble_sort(arr) begin (arr.count – 1).times do |i| (arr[i], arr[i […]

这些奇怪的字符是什么意思?

我正在阅读Ruby书,但它没有解释以下内容: 这是什么: validates :name, :presence => true 我的意思是我知道它的作用但是什么是validates ? 它是validation器类的方法吗? 如果是这样的话,怎么在没有提到类名的情况下调用呢? 是什么意思:在前面的代码和Rails中一般? 在以下代码中: form_for是一个对象还是一个程序函数? 什么是|的含义 |f|字符 在 谁,何时何地定义了edit_post_path方法? 它属于哪个class级?

RSpec – 测试是否使用之前定义的块调用块

我最近问过如何在RSpec中测试是否调用了一个块,并且该问题的答案似乎在一个简单的情况下起作用。 问题是当块的初始化更复杂时。 然后它在before完成并在上下文中通过许多不同的测试重用,其中一个测试是否评估了块。 看例子: context “the node definition using block of code” do before do @n=node do # this block should be called end # some more complex setup concerning @n end it “should call the block” do # how to test it? end # here a bunch of other tests using @n end 在这种情况下,具有副作用改变局部变量值的解决方案不起作用。 […]

find_in_batches“NO BLOCK GIVEN(YIELD)”

我有一个方法,我接受一个模型和result_size。 我尝试在这种方法中做的第一件事是: array = model.logs.find_in_batches(:batch_size => result_size) 但这不起作用; 相反,它返回“No Block Given(Yield)”。 我想我只是不熟悉块和收益率。 如果有人能帮助我理解/解决这个问题,我将不胜感激! 提前致谢!

Ruby:const_set在块之外?

我想用Ruby模拟一个类 。 如何编写一个处理样板代码的方法? 以下代码: module Mailgun end module Acani def self.mock_mailgun(mock) temp = Mailgun const_set(:Mailgun, mock) p Mailgun yield ensure const_set(:Mailgun, temp) end end Acani.mock_mailgun(‘mock’) { p Mailgun } 打印: “mock” Mailgun 这里发生了什么? 为什么Mailgun在块内部具有原始值? 这与Ruby绑定有关吗? Ruby版本:2.1.1p76