簡體   English   中英

在幫手中Rails部分本地人

[英]Rails partial locals in helper

在RoR中是否有一種方法可以訪問助手中的當前部分本地。 我想要類似的東西

<% render partial: 'foo', locals: { :foo: 'bar' } %>

然后進入,讓我們說ApplicationHelper:

def my_helper_method
  ...
  my_var = ...local_assigns[:foo] # should assign 'bar'
  ...
end

描述問題的其他方法是:如何隱式地將傳遞給部分的局部傳遞給我的助手方法? 如果我明確地這樣做,有很多樣板代碼,它只是將部分參數傳遞給一個輔助方法,而且我有很多這樣的代碼。

可能嗎?

助手不了解局部變量中的局部變量。 除非你明確地傳遞了一個參數,否則你不能做你提出的建議。 您可以做的是使用演示者采用面向對象的方法,並避免一起使用幫助器。

如Railscasts劇集中所述,可以創建自己的,也可以使用像Draper這樣的寶石。 就個人而言,我贊成“滾動你自己”的方法,因為它非常簡單。

一些偽代碼來實現這個想法:

class FooPresenter
  def initialize(object, template)
    @object, @template = object, template
  end

  def amazing_foo
    @template.content_tag :div, class: 'foo' do
      "#{@object.name}: Wow! this is incredible!"
    end
  end
end

module FooHelper
  def present_foo(object)
    presenter = FooPresenter.new(object, self)
    yield presenter if block_given?
    presenter
  end
end

只是從你的視圖中實例化。

= present_foo(foo) do
  = amazing_foo

是的,不需要通過params。

幫助程序只是在命名空間中浮動的模塊,坦率地說,它們大多數時候都會鼓勵不良的編碼實踐。 演示者提供了一種清晰的OOP方式來處理復雜的視圖邏輯。 試試看。

通常,您會將參數從視圖傳遞到方法中,因此請將方法更改為:

def my_helper_method(input_param)
  ...
  my_var = ...foo # should assign 'bar'
  ...
end 

並將此調用為視圖中傳遞foo作為input_param的任何其他方法。

你需要發送param到my_helper_method

def my_helper_method(foo)
  ...
  my_var = foo
  ...
end

在部分

<%= my_helper_method(foo) %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM