如何在Rubyonrails中只需单击按钮即可更新db中的多个表?

时间:2016-03-09 08:52:40

标签: javascript jquery ruby-on-rails postgresql

我有一个模块的3个模型。在视图中,我已经获取了值并在视图中以表格格式显示这些值。现在,如果我在表中编辑值并单击“保存”按钮,则应在db中的相应表中更新相应的值,并返回到具有相同id的相同视图。如何实现此目的?

如果我在视图中的表中添加了一行和相应的值,那么这些值也应该添加到它们各自的表中。

<table>
<%@task.each do |task|%>
<tr id="task-<%=task.id%>">
<td>task.name</td>
</tr>
<%@subtask.each do |subtask|%>
<tr id="subtask-<%=subtask.id%>">
....
</tr>
<% end %>
<% end %>
</table>

现在点击“保存”按钮,子任务模型应该用子任务更新,任务模型应该用任务更新。子任务模型引用任务模型和任务模型引用发票模型。获取值时,发票ID是基础,并且基于该任务和正在提取子任务。

我想基于Invoice_ID更新模型中的值。我不想重定向,因为我应该在同一个视图中,数据应该在db中更新。

1 个答案:

答案 0 :(得分:0)

你混淆了模型,视图,控制器概念。 如果要在视图中编辑某些内容并想要更改数据库,则必须在视图中使用某种形式来编辑值,相应地,您必须在控制器中使用一种方法来处理该发布请求。 在控制器中,您必须将这些值保存在表中。 例如,这里是将采取输入的视图

<h1>Update your profile</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@user) do |f| %>

        <%= f.label :name %>
        <%= f.text_field :name, class: 'form-control' %>

        <%= f.label :email %>
        <%= f.email_field :email, class: 'form-control' %>

        <%= f.label :password %>
        <%= f.password_field :password, class: 'form-control' %>

        <%= f.label :password_confirmation, "Confirmation" %>
        <%= f.password_field :password_confirmation, class: 'form-control' %>

        <%= f.submit "Save changes", class: "btn btn-primary" %>
    <% end %>

    <div class="gravatar_edit">
      <%= gravatar_for @user %>
      <a href="http://gravatar.com/emails">change</a>
    </div>
  </div>
</div>  

其相应的控制器是用户控制器:

def edit
    @user = User.find(params[:id])
  end

 def user_params
    params.require(:user).permit(:name, :email, :password,
                                 :password_confirmation)
  end

其中name,email,password是数据库中的表字段