0

我有一个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) %>

现在它呈现一个空表单。

谢谢!

4

4 回答 4

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
于 2013-07-25T06:01:04.553 回答
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 %>

看到这个链接

希望这是你需要的

于 2013-07-25T06:27:23.953 回答
0

您可以使用dupfor 已存在对象来复制已存在的对象。

def new
  @transaction = Transaction.new
  @transaction = current_user.transactions.find(params[:id]).dup 
end

和链接可以是

<%= link_to "Redo transaction", new_transaction_path(@transaction) %>
于 2013-07-25T06:34:06.970 回答
0

您可以通过编辑控制器操作使用link_to渲染的组合。如果您想在new中使用与在edit中相同的表单,请使用 partial,它可以通过render调用。在此处查看有关部分的更多信息。

要“重做”事务,您需要创建一个编辑控制器操作(及其相应的编辑视图)。指向“重做事务”的链接应如下所示:

<%= link_to "Redo Transaction", edit_transaction_path %>

例如,在您的展示视图中。

然后在您的编辑视图中,您可以通过包含

<%= render 'form' %>

在您的编辑视图中,这将调用部分 _form.html.erb 中的代码。然后,此部分可能包含与您在的. 实际上,您的视图还可以包含此渲染语句,使您的代码干燥,并且它将在new中呈现与在edit中相同的表单,除了在edit的情况下您的表单字段已经填充了您的属性。Rails 会为您填写。

编辑:

在使用已填充属性创建新交易记录的情况下,您可以关注我在 Link_to 中传递参数的帖子,除非您不必隐藏要使用属性填写的表单字段。

于 2013-07-25T06:11:00.103 回答