使用rails 4中的对象内容更新部分

时间:2013-08-09 12:08:43

标签: ruby-on-rails rendering ruby-on-rails-4 erb renderpartial

好吧,我有一个问题,我想知道它是否只能通过rails来解决。

我已经设置了一个视图(home.html.erb)vith 3 partials,如下所示:

<%provide :title, 'Reader'%>
<div class = "row">
  <div class = "span4">
    <div class = "row">
      <%= render 'layouts/add_subscription'%>
    </div>
    <div class = "row">
      <%= render 'layouts/subscription_list'%>
    </div>
  </div>
  <div class = "span8">
    <div class = "row">
      <%= render 'layouts/view' %>
    </div>
  </div>
</div>

其中subscription_list显示重定向后指向列表操作的链接列表,每个链接都带有订阅的ID:

<ul>
  <% current_user.subscriptions.each do |s| %>
    <li><%= link_to s.url, "/list?s_id=#{s.id}" %></li>
  <% end %>
</ul>

因此,这些链接中的每一个都指向控制器中的列表操作,该操作尝试获取刚刚单击的订阅的订阅源列表,并使用所选订阅的标题列表更新主视图:

def list
  s_id = params[:s_id]
feed = ""
if !s_id.blank?
  s = Subscription.find_by(id: s_id)
  feed = Feedzirra::Feed.fetch_and_parse(s.url)
  #render partial: "layouts/view", :locals => {:f => feed}
end

问题在于我在这一点上陷入困​​境。我已经尝试使用feed作为参数执行redirect_to home_path,甚至是渲染(list方法结束之前的行)来查看发生了什么,但没有更新'just'布局/视图partial:

<ul>
<% if defined? feed and !feed.blank? %>
  <% f.entries.each do |entry|%>
    <li><%= entry.title %></li>
  <% end %>
<% end %>
</ul>

所以,我想知道是否可以更新部分并在仅使用rails方法重新加载页面后查看结果,或者是否可以/必须使用javascript完成,以及如何执行此操作的线索。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您要实现的目标是在点击链接后在home.html.erb中显示Feed条目。

您可以将链接指向home操作而不是list来执行此操作,以便导轨自动呈现您的home.html.erb视图和 您必须分配实例变量@feed,以便它在您的视图中可见。

你可以这样做(重构一下):

控制器

def home
  s_id = params[:s_id]

  if s_id.present?
    s = Subscription.find_by(id: s_id)
    @feed = Feedzirra::Feed.fetch_and_parse(s.url)
  end
end

布局/视图

<ul>
  <% if @feed.present? %>
    <% @feed.entries.each do |entry|%>
      <li><%= entry.title %></li>
    <% end %>
  <% end %>
</ul>

我不确定你行动的途径是什么,我假设home是根(“/”)

布局/ subscription_list

<ul>
  <% current_user.subscriptions.each do |s| %>
    <li><%= link_to s.url, "/?s_id=#{s.id}" %></li>
  <% end %>
</ul>