填充字段的新实例

时间:2013-07-25 05:54:25

标签: ruby-on-rails ruby-on-rails-3.2

我有一个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 个答案:

答案 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) %>