Showing posts with label View. Show all posts
Showing posts with label View. Show all posts

Monday, September 07, 2009

Helpers Outside Views

How to access helper methods outside of the view layer?


# models/category.rb
def description
  "This category has #{helpers.pluralize(products.count, 'product')}."
end

def helpers
  ActionController::Base.helpers
end

# products_controller.rb
def create
  @product = Product.new(params[:product])
  if @product.save
    flash[:notice] = "Successfully created #{@template.link_to('product', @product)}."
    redirect_to products_url
  else
    render :action => 'new'
  end
end


Reference: http://railscasts.com/episodes/132-helpers-outside-views

Monday, January 07, 2008

render partial的几个参数说明附例子

由render方法内部代码:
render_partial_collection(partial, collection, options[:spacer_template], options[:locals], options[:status])
引出的render partial的几种用法:
1. 当在render :partial时参数里有传:collection一个对象集合时(如下所示的@users),会自动在当前的view视图里循环此:partial
2. 当在render :partial时参数里有传:local时,在:local这个Hash中的key(var1,var2)可以在partial里作为局部变量调用,如下所示:


Controller:
def partial_methods
@users = User.find(:all)
end
View(partial_methods.rhtml):
<%= render :partial => 'user', :collection => @users, :locals => {:var1 => 'test_local_var1_in_partial(_user)', :var2 => 'test_local_var2_in_partial(_user)'}, :spacer_template => 'spacer_partial' %>
View(_user.rhtml)
<%= user.name %>
<br />
<%= var1 %>
<br />
<%= var2 %>
<br />
View(_spacer_partial.rhtml)
<p>
space line
<%= debug @users %>
</p>

在partial _user.rhtml中可以调用:locals中的var1和var2
3. 当在render :partial时参数里有传:spacer_template时,此参数对应的partial模板会被作为遍历collection进行render :partial的渲染时插入.
4. 在view中render :partial时其中的:status传什么值并不会影响view的渲染.
5. 在:spacer_template的partial中可以使用controller中传过来的变量,但不能取到赋于render :partial的:local变量,如var1,var2