更新功能不会更新帖子,但会创建新帖子

时间:2016-02-27 04:54:40

标签: ruby-on-rails ruby

我一直在创建一个我创建这些条目的系统,但问题是当我尝试创建编辑功能时,它不会更新帖子但会创建一个新的。

我的控制器文件如下所示:

class BetsController < ApplicationController
  def new
    @bet = Bet.new
  end

  def create
    @bets = Bet.new(bet_params)

    if @bets.save
        flash[:success] = 'Bet Successfull Logged.'
        redirect_to new_bet_path
      else
        flash[:danger] = 'Error, Bet has not been logged. Try again mate.'
        redirect_to new_bet_path
      end
  end

  def show
    @bet = Bet.find(params[:id])
  end

  def edit
    @bet = Bet.find(params[:id])
  end

  def update
    @bet = Bet.find(params[:id])

        if @bet.update_attributes(bet_params)
            flash[:success] = "Bet Updated!"
            redirect_to bet_path(params[:id])
        else
            render action: :edit
        end
  end

  private

    def bet_params
      params.require(:bet).permit(:bet_placed, :game, :units_placed, :odds, :profit_or_loss)
    end

end

提交的表单也是如此:

<%= form_for :bet, url: bets_path, :html => { :multipart => true } do |f| %>

  <p class="form-group">
    <%= f.label :bet_placed %><br>
    <%= f.text_field :bet_placed, class: 'form-control' %>
  </p>

  <p class="form-group">
    <%= f.label :game %><br>
    <%= f.text_field :game, class: 'form-control' %>
  </p>

  <p class="form-group">
    <%= f.label :units_placed %><br>
    <%= f.text_field :units_placed, class: 'form-control' %>
  </p>

  <p class="form-group">
    <%= f.label :odds %><br>
    <%= f.text_field :odds, class: 'form-control' %>
  </p>

  <p class="form-group">
    <%= f.label :profit_or_loss %><br>
    <%= f.text_field :profit_or_loss, class: 'form-control' %>
  </p>

  <%= f.submit 'Update Profile', class: 'btn btn-default' %>

<% end %>

2 个答案:

答案 0 :(得分:1)

当前设置表单的方式,它始终会点击create操作。如果您将form_for更改为以下内容,则应该

<%= form_for @bet do |f| %>
...
<% end %>

由于您的表单没有任何文件输入,因此您不需要multipart => true

答案 1 :(得分:0)

根据rails自然路由,路径bets_path始终转到create方法。由于更新需要一个id,而你没有给它,所以它就是创建。

将表单更改为,

&#13;
&#13;
<%=  form_for @bet, :html => { :multipart => true } do |f| %>

  <p class="form-group">
    <%= f.label :bet_placed %><br>
    <%= f.text_field :bet_placed, class: 'form-control' %>
  </p>

  ....................

  <p class="form-group">
    <%= f.label :profit_or_loss %><br>
    <%= f.text_field :profit_or_loss, class: 'form-control' %>
  </p>

  <%= f.submit 'Update Profile', class: 'btn btn-default' %>

<% end %>
&#13;
&#13;
&#13;

供参考,

&#13;
&#13;
HTTPVerb    Path	    controller#Action	Named Helper
GET	        /bets   	bets#index	       bets_path
GET	       /bets/new   	bets#new	       new_bet_path
POST	   /bets   	    bets#create  	    bets_path
GET	       /bets/:id   	bets#show	        bet_path(:id)
GET	      /bets/:id/edit  	bets#edit	    edit_bet_path(:id)
PATCH/PUT  /bets/:id   	bets#update	        bet_path(:id)
DELETE	   /bets/:id   	bets#destroy	    bet_path(:id)
&#13;
&#13;
&#13;