为什么我的表单用于创建新对象但不更新现有对象?

时间:2018-01-23 20:50:31

标签: ruby-on-rails forms routes submit ruby-on-rails-5

我想构建一个可以创建和更新模型的表单。我有这个

    <%= form_for @vote, :url => votes_path, :remote => true do |f| %>
            <%= f.hidden_field :person_id, :value => @person.id %>
            <%= f.text_field :score %>
            <%= f.submit %>
            <%= submit_tag 'Skip', :name => 'skip', :type => 'button' %>
    <% end %>

在我的路线文件中,我有

resources :votes

但是当&#34; @ vote&#34;对象存在且具有ID,上述表单无法提交,给出错误

POST http://localhost:3000/votes 404 (Not Found)

以下是我的控制器设置方式,虽然我觉得在尝试提交时它甚至没有那么远......

class Vote < ApplicationRecord
  belongs_to :person
  belongs_to :user


  def create
    puts "vote params; #{vote_params}"
    @vote = Vote.new(vote_params)

    ...
  private

    def vote_params
      params.require(:vote).permit(:score, :person_id)
    end

1 个答案:

答案 0 :(得分:1)

如果要在模型vote上同时允许创建和更新方法,则可以跳过使用url,form_for将自动检测REST调用。

<%= form_for @vote, :remote => true do |f| %>
  <%= f.hidden_field :person_id, :value => @person.id %>
  <%= f.text_field :score %>
  <%= f.submit %>
  <%= submit_tag 'Skip', :name => 'skip', :type => 'button' %>
<% end %>

现在要创建对象vote,您需要进行POST调用,例如

POST http://localhost:3000/votes

要更新对象,您需要进行PUT / PATCH调用,例如

PUT http://localhost:3000/votes/:id