Vestal_versions:列出rails应用程序中编辑的所有版本

时间:2012-02-12 10:13:33

标签: ruby-on-rails version

我在我的rails应用程序中使用vestal_version。我想知道如何显示以前的版本编辑链接与上述条目相关。我的html.erb代码是

        <tbody>
                        <% @page.versions.each do |page| %>
                        <tr class="odd">
                          <td><input type="checkbox" /></td>
                          <td> </td>
                          <td><%= page.created_at%></td>
                          <td>
                          <% if params[:version] %>
                          <%= link_to "Previous Version", :version => @page.version-1 %>
                          <%end%>
                        </td>
                        </tr>


                  </div>
         <% end %>

并且在控制器中我有@page.revert_to(params[:version].to_i) if params[:version]

我附上了截图的链接。如果仔细观察。所有条目的?version = 5。我希望拥有1,2,3,4和5的所有版本。我该怎么做?

更新:图片在评论中超链接。我现在不允许添加图片。

1 个答案:

答案 0 :(得分:1)

使用page代替@page

<%= link_to "Previous Version", :version => page %>

page每次迭代都会发生变化,而@page保持不变。

修改

由于@page.versions.each会迭代一组版本,因此应将其作为version传递到块中,而不是page

<% @page.versions.each do |version| %>
  <tr class="odd">
    <td><input type="checkbox" /></td>
    <td> </td>
    <td><%= version.created_at%></td>
    <td>
    <%= link_to "Show Version", :version => version %>
    </td>
  </tr>
<% end %>

此方法仅显示版本。实际上,应该通过POST来恢复版本,因为您正在对数据库进行更改。

还原否定更改,不会丢弃更改。如果page版本为4,并且您还原为版本2,则它不会删除版本3和4.版本编号将恢复为2,但将计为版本本身。

#revert_to执行还原但不保存。要还原保存,请使用#revert_to!


要正确使用#revert_to!,您需要将其置于控制器操作中。

示例,在您的pages控制器中:

def revert
  @page = Page.find params[:id]
  if @page.revert_to!(params[:version_id]) # <= revert_to!
    redirect_to @page
  else
    render :text => "Did not revert"
  end
end

routes.rb

resources :pages do
  member do
    post 'revert_to/:version_id' => 'pages#revert', :as => :revert
  end
end

然后在你看来:

<% @page.versions.each do |version| %>
  <tr class="odd">
    <td><input type="checkbox" /></td>
    <td> </td>
    <td><%= version.created_at %></td>
    <td>
    <%= link_to "Show Version", :version => version %>
    </td>
    <td>
    <%= button_to "Revert to this version", revert_page_path(@page, version.id) %>
    </td>
  </tr>
<% end %>