试图渲染:部分而不是整个视图

时间:2011-04-14 09:25:05

标签: ruby-on-rails ruby-on-rails-3

我试图通过一些简单的切换来渲染小部分而不是改变整个视图 - 我不清楚这是否被认为是AJAX ......无论如何。

我们让用户回答问题。在这样做时,问题本身可能被标记为不合适。

查看:answers#new.html.erb
部分视野:_flag.html.erb
用于切换的控制器:opinions/flag,用于更新opinion并在当前flag内呈现answers#new部分。

# flag.html.erb
<% if @opinion.try(:flag) == true %>
    <b>Flagged.</b>
    <%= link_to "undo", opinions_flag_url(:id => @question.id, :flag => false), :remote => true %>
<% else %>
    <%= link_to "flag this", opinions_flag_url(:id => @question.id, :flag => true), :remote => true %>
<% end %> 

# last part of opinions controller / flag
if @opinion.save
    format.html { render :partial => "answers/flag" }
    format.xml  { head :ok }
else
    format.html { render :action => "new", :id=>params[:id] }
    format.xml  { render :xml => @opinion.errors, :status => :unprocessable_entity }
end

渲染部分,但不在当前视图中(它显示在空白页面上)。一般来说,如果没有Rails假设它需要自己显示部分,我如何在当前视图中渲染位和片段?

推论:如果我想将文本渲染到视图中,如何指定新文本的去向?

1 个答案:

答案 0 :(得分:1)

你应该使用rjs。如果您不确定是否使用它,则可能不是:)

简而言之,您应该使用 form_remote_for 而不是 form_for ,并且应该在控制器中使用它。

respond_to do |format|
  ...
  format.js { Do stuff here }
end

以下是截屏视频:http://railscasts.com/episodes/43-ajax-with-rjs

将某些html放在特定位置的具体命令是:

page.replace_html "SOME_HTML_ID", "<p>SOME_HTML</p>"

但是一旦你看过截屏视频,这应该是显而易见的:)