我有一个form_for @transaction
,它会使用空字段呈现一个新表单,用于创建新的Transaction
。
现在我想让用户重做交易。
因此,用户有很多交易。每个交易都有一个“重做交易”链接。
当用户点击此链接时,我想为新的Transaction
呈现提供相同的表单,但需要填写Transaction
中填写的字段,用户想要重做。
现在我的transaction_controller.rb
我有这个:
def new
@transaction = current_user.transactions.new
@repeat_transaction = current_user.transactions.new(params[:transaction])
end
在Transaction
视图中重做_transaction.rb
的链接是:
<%= link_to(content_tag(:i, '', class: 'icon-repeat'),
new_transaction_path(@repeat_transaction),
class: 'transaction_redo_icon',
style: 'display: none;',
remote: true) %>
现在它呈现一个空表格。
谢谢!
答案 0 :(得分:1)
您的重做链接将如下所示
<%= link_to "Redo transaction", new_transaction_path(@transaction) %>
重写你的控制器新方法,比如
def new
@transaction = params[:id] ? current_user.transactions.new : current_user.transactions.find(params[:id])
end
答案 1 :(得分:0)
您可以通过编辑控制器操作结合使用 link_to 和渲染。如果要在编辑中使用 new 中的相同表单,请使用partial,可以通过 render 调用。详情请参阅部分here。
要“重做”事务,您可以创建编辑控制器操作(以及相应的编辑视图)。 “重做交易”的链接应该是:
<%= link_to "Redo Transaction", edit_transaction_path %>
在您的 show 视图中。
然后在编辑视图中,您可以在视图文件夹中呈现一个名为 _form.html.erb 的部分内容,包括
<%= render 'form' %>
编辑视图中的,它会调用部分_form.html.erb中的代码。然后,此部分可以包含与您在 new 上使用的格式相同的格式。实际上,您的 new 视图也可以包含此渲染语句,使您的代码变为DRY,并且它将在 new 中呈现与 edit <中相同的形式< / em>,但在编辑的情况下,您的表单字段已填入您的属性。 Rails会为你填写。
修改强>
如果使用填充属性制作新交易记录,您可以在Pass Parameters in Link_to上关注我的帖子,除非您不一定要隐藏表单字段你想用属性填写。
答案 2 :(得分:0)
导轨指南针对此案例提供了具体示例。
要点: 对于新对象,在视图上
<%= form_for(Model.new) do |f| %>
<%= f.input_field :field_name %>
...
<% end %>
将呈现一个新表单,并将输入框绑定到表单字段。
对于现有对象,在视图
上<%= form_for(@object_instance) do |f| %>
<%= f.input_field :field_name %> <!-- this will populate it with database content and leave open for editing -->
...
<% end %>
请参阅此link
希望这是你需要的
答案 3 :(得分:0)
您可以使用现有对象的dup
复制现有的对象。
def new
@transaction = Transaction.new
@transaction = current_user.transactions.find(params[:id]).dup
end
和链接可以
<%= link_to "Redo transaction", new_transaction_path(@transaction) %>