Ruby on rails Rails:更新模型属性。缺少模板时出错
我正在尝试创建一个页面来编辑/更新记录,但出现以下错误:Ruby on rails Rails:更新模型属性。缺少模板时出错,ruby-on-rails,Ruby On Rails,我正在尝试创建一个页面来编辑/更新记录,但出现以下错误: Missing template tickets/update, application/update with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/ubuntu/workspace
Missing template tickets/update, application/update with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/ubuntu/workspace/app/views"
我的票务控制员:
class TicketsController < ApplicationController
before_action :logged_in_user, only: [:create, :destroy, :index]
def index
@tickets = Ticket.all
end
def show
@ticket = Ticket.find(params[:id])
end
def edit
@ticket = Ticket.find(params[:id])
end
def update
@ticket = Ticket.find(params[:id])
if @ticket.update_attributes(ticket_params)
flash[:success] = "Ticket atualizado!"
redirect_to @ticket
else
render 'edit'
end
end
def new
@ticket = Ticket.new
@user = current_user
end
def create
@ticket = Ticket.new(ticket_params)
@ticket.user = current_user
if @ticket.save
redirect_to @ticket
else
render :new
end
end
def destroy
end
def update
end
private
def ticket_params
params.require(:ticket).permit(:subject, :body, :status)
end
end
我是基于同一应用程序中的另一个模型编写的,该模型在更新属性时没有错误。
已尝试更改为@ticket.update_attributes(params[:ticket])
和其他有关stackoverflow的建议,但没有成功
我错过了什么
对不起,我的英语不好。Rails中控制器操作的行为是。发生这种情况时,Rails将查找与操作同名的模板 Ruby允许您这样做,这在您打算重写现有方法的行为时非常有用 在本例中,要执行的第一个
update
方法被第二个update
方法覆盖。第二个update
方法没有任何作用,因此默认情况下Rails尝试呈现一个名为tickets/update
的模板。这就是导致缺少模板票据/更新错误的原因
要解决此问题,您需要删除不需要的第二个方法。Rails中控制器操作的行为是。发生这种情况时,Rails将查找与操作同名的模板
Ruby允许您这样做,这在您打算重写现有方法的行为时非常有用
在本例中,要执行的第一个update
方法被第二个update
方法覆盖。第二个update
方法没有任何作用,因此默认情况下Rails尝试呈现一个名为tickets/update
的模板。这就是导致缺少模板票据/更新错误的原因
要解决此问题,您需要删除不需要的第二个方法。在TicketController中,您是否意外地在文件的更下方有了update
方法的第二个定义?看起来它需要在views/tickets文件夹中有一个update.html.erb文件。然而,发送到update方法的请求很可能应该是put或patch方法,这不需要这样做,因此我认为表单的路由或方法可能有问题。什么是耙路线的返回?你能把它寄出去吗?更新方法有post方法吗?@cschroed我不知道你是怎么发现的,但这就是问题所在!非常感谢你!我将更新问题以指出问题所在,以便您能够正确回答。(我不知道这是否是正确的程序)@cschroed Done!已将问题更新为整个Tickets.Controller。等待您的答案标记为正确!再次感谢我正在学习Rails并花了一整天的时间在这个=PIn-the-tickets控制器上,您是否意外地在文件的下面有了update
方法的第二个定义?看起来它希望在views/tickets文件夹中有一个update.html.erb文件。然而,发送到update方法的请求很可能应该是put或patch方法,这不需要这样做,因此我认为表单的路由或方法可能有问题。什么是耙路线的返回?你能把它寄出去吗?更新方法有post方法吗?@cschroed我不知道你是怎么发现的,但这就是问题所在!非常感谢你!我将更新问题以指出问题所在,以便您能够正确回答。(我不知道这是否是正确的程序)@cschroed Done!已将问题更新为整个Tickets.Controller。等待您的答案标记为正确!再次感谢,我正在学习Rails,并且花了一整天的时间在这个=p伟大的答案上!阅读文档时很难记住这些事情,但这一点我永远不会忘记!=]答案也很好!阅读文档时很难记住这些事情,但这一点我永远不会忘记!=]
<h1>Editar Ticket</h1>
<h2><%= @ticket.subject %></h2>
<div class ="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@ticket) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :status %>
<%= f.select :status, ['Aberto', 'Resolvido', 'Fechado', 'Processando']%>
<p><%= @ticket.body %></p>
<%= f.submit "Salvar", class: "btn btn-primary" %>
<% end %>
</div>
</div>
Processing by TicketsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ljRnDwjCpKhL+Jl4PkQbLiyEESHnVMgQjpt2EJ6QoEhMza03feBRzz3xOAFsjnjWz7+ASAuGn1qKx+gHtUIm7w==", "ticket"=>{"status"=>"Fechado"}, "commit"=>"Salvar", "id"=>"16"}
Completed 500 Internal Server Error in 4ms (ActiveRecord: 0.0ms)
ActionView::MissingTemplate (Missing template tickets/update, application/update with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}.