我在我的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的所有版本。我该怎么做?
更新:图片在评论中超链接。我现在不允许添加图片。
答案 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 %>