如何更新现有记录?

时间:2015-03-25 17:39:38

标签: ruby-on-rails ruby-on-rails-4

我有一个Books模型,它有CRUD操作。在config / routes.rb中,我声明了

map.resources :books

我的new.html.erb看起来像:

<%= form_for :book, url: books_path do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title %>
  <%= f.submit :Add %>
<% end %>

我在控制器中的创建方法如下所示:

def create
  book = Book.new(authorized_params)
  book.save
end

因此,当我从视图提交表单时,请求将转到'create'方法,并在数据库中创建该书的记录。很公平。现在,我想要一本书的编辑页面。所以,我在控制器中的编辑方法如下所示:

def edit
  @book = Book.find_by(params[:id])
  render :new
end

当我进入我的编辑视图时,它会自动在文本框中显示标题的值,这正是我的预期。但是当我尝试再次提交表单时(更改标题值之后),它再次创建新记录而不是更新它..

在阅读中我错过了哪些基本内容?我搜索了它,但没有找到满意的答案。

1 个答案:

答案 0 :(得分:0)

问题在于您使用的是“&#39; new&#39;查看表单具有post方法的位置。如果要检查生成的路由,则post将用于create方法,即添加新记录。您必须创建一个新视图以进行编辑,其中表单目标URL为edit_book_path(@book),方法将为patch。补丁方法将路由到更新&#39;您可以在控制器中调用@ book.update。我没有编写确切的代码,但这些指示应该可以帮助您实现您想要的目标