通过调用update方法而不是create来创建“创建”按钮

时间:2017-12-01 23:23:28

标签: ruby-on-rails ruby web request

这是我通过表单创建新对象的代码:

我的'new.html.erb'文件:

 <%= form_for @ticket, url: new_geradorqrcode_path(@ticket), html: { method: :put } do |t| %>
<p>
    <%= t.label :Descricao %></br>
    <%= t.text_area :descricao, cols: 20, rows: 5 %>

</p>

<p>
    <%= t.label :Tipo %></br>
    <%= t.text_field :tipo %>
</p>


<p>
    <%= t.label :Tamanho %></br>
    <%= t.number_field :tamanho_arquivo %>
</p>


 <p>
    <%= t.label :Cliente %></br>
    <%= t.text_field :cliente %>
</p>

<p>
    <%= t.label :Valor %></br>
    <%= t.number_field :valor %>
</p>

<p>
    <%= t.submit %>
</p>

但是当我点击“创建”按钮时,会出现此错误:

erro

我在控制器中创建了'update'和'create'方法:

def update
    @ticket = Ticket.find(params[:id])
    ticket_params = params.require(:ticket).permit(:descricao,:valor, :cliente, :tamanho_arquivo, :tipo)
    @ticket.update(ticket_params)
    redirect_to url: geradorqrcode_path(@ticket), html: { method: :post }
end

和'create'方法:

def create
    @ticket = Ticket.new(params[:ticket])
    @ticket.save
    redirect_to url: geradorqrcode_path(@ticket), html: {method: :post}
end

我的'新'动作

def new
    @ticket = Ticket.new

end

和'routes.rb'

Rails.application.routes.draw do

root 'geradorqrcode#index'
resources :geradorqrcode
end

1 个答案:

答案 0 :(得分:0)

<%= form_for @ticket, url: new_geradorqrcode_path(@ticket), html: { method: :put } do |t| %>

这是您的新表单,这意味着您正在处理尚未持久保存到数据库的新对象。 html: { method: :put }语法适用于您希望表单更新已保留的对象的时间。这将在编辑页面上进行。在您的情况下,这是您的new表单,在提交时会转到控制器中的create操作。

<%= form_for @ticket, url: geradorqrcode_path(@ticket) do |t| %>

这是新表单的外观。试试这个,你应该得到你想要的东西。您将遇到的另一个问题是redirect_to语法。从html: { method: :post }update方法中删除create