0

好吧,我有一个问题,我想知道它是否可以只用 rails 来解决。

我已经设置了一个包含 3 个部分的视图(home.html.erb),如下所示:

<%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 ,甚至进行渲染(列表方法末尾之前的行)以查看发生了什么,但没有更新“只是”部分布局/视图:

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

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

4

1 回答 1

0

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

您可以通过将链接指向home操作而不是list让 rails 会自动呈现您的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是根(“/”)

布局/订阅列表

<ul>
  <% current_user.subscriptions.each do |s| %>
    <li><%= link_to s.url, "/?s_id=#{s.id}" %></li>
  <% end %>
</ul>
于 2014-02-18T23:27:19.057 回答