Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails—一个操作,多个模板—rails是如何处理这个问题的?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails rails—一个操作,多个模板—rails是如何处理这个问题的?

Ruby on rails rails—一个操作,多个模板—rails是如何处理这个问题的?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,让我们以PeopleController#show action为例。如果我需要根据应用程序以几种不同的方式显示一个人,该怎么办。我有一些基于请求格式(js、html)的选项,但我确实需要更多 我可以做不同的控制器动作,但我更喜欢基本的控制器,除非我没有明智的选择。另一个想法是有一个case语句和一个模板参数,但这似乎也很麻烦(特别是当某些视图针对某些用户类型时) 我的问题是:rails是如何做到这一点的 人民控制器.rb def show set_partial respond_to

让我们以PeopleController#show action为例。如果我需要根据应用程序以几种不同的方式显示一个人,该怎么办。我有一些基于请求格式(js、html)的选项,但我确实需要更多

我可以做不同的控制器动作,但我更喜欢基本的控制器,除非我没有明智的选择。另一个想法是有一个case语句和一个模板参数,但这似乎也很麻烦(特别是当某些视图针对某些用户类型时)

我的问题是:rails是如何做到这一点的

人民控制器.rb

def show
  set_partial
  respond_to do |format|
    format.js
  end
end

protected
def set_partial
  @template = case params[:template]
                when 'small' then 'small_view'
                when 'quick' then 'quick_view'
                else
                  'full_view'
              end
end
人物/show.js.erb

$('body').append("<%= escape_javascript(render partial: @partial) %>")
$('body')。追加(“”)

嗨,朋友,这可能会对你有所帮助

def show
  respond_to do |format|
   if (condition)
    format.js { render :template => "small_view" }
    #renders small_view.js.erb
    format.html { render :template => "small_view" }
    #renders small_view.html.erb
   elsif (condition)
    format.js { render :template => "quick" }
    format.html { render :template => "quick" }
   elsif (condition)
    format.js { render :template => "full_view" }
    format.html { render :template => "full_view" }
   else
    format.html
    format.js
   end
  end
end