Ruby 1.9.2p290
Rails 3.1.0
Я создал свой сайт из скаффолдинга и пытаюсь изменить свои маршруты, поэтому вместо использования: id я могу использовать:gameNumber.
В моем контроллере я изменил
с
@ticket = Ticket.find(params[:id])
на
@ticket = Ticket.find_by_gameNumber(params[:id])
В своих представлениях я изменил
с
ticket
до
ticket_path(ticket.gameNumber)
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь обновить, я получаю нулевую ошибку.Я знаю, что проблема в том, что кнопка обновления использует: id, а не: gameNumber, я просто не знаю, как это исправить.Вот соответствующий код, относящийся к проблеме.
Контроллер
def update
@ticket = Ticket.find_by_gameNumber(params[:id])
respond_to do |format|
if @ticket.update_attributes(params[:ticket])
format.html { redirect_to ticket_path(@ticket.gameNumber), notice: 'Ticket was successfully updated.' }
format.json { head :ok }
else
format.html { render action: "edit" }
format.json { render json: @ticket.errors, status: :unprocessable_entity }
end
end
end
Форма
<%= form_for(@ticket) do |f| %>
Если кто-то может указать мне ссылку, которая может объяснить проблему,помогите объяснить проблему, предоставить решение или лучший способ сделать это, я был бы очень признателен.
Спасибо.
Обновление:
Вот ошибка:
NoMethodError в TicketsController # update
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.update_attributes
Rails.root: C: / home / workspace / App
Трассировка приложения
app / controllers / tickets_controller.rb: 65: in block in update'
app/controllers/tickets_controller.rb:64:in
update '
Request
Параметры:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"4ft2LU5CRcV+qV8ipjBm23TTBrXlmHjA042SpSZOkMc=",
"ticket"=>{"gameNumber"=>"1114",
"gameName"=>"Fun"
"isClosing"=>"0",
"isActive"=>"1"},
"commit"=>"Update Ticket",
"key"=>:gameNumber,
"id"=>"220"}
Хотели бы вы также Framework Trace и Full Trace?
Обновление 2:
Если я добавлю следующеек моей модели:
def to_param
gameNumber
end
Я получаю следующие ошибки.
NoMethodError в Tickets # edit
Отображение C: / home / workspace / App / app / views /tickets / _form.html.erb, где поднята строка # 1:
undefined method `split' for 1114:Fixnum
Извлеченный источник (вокруг строки # 1):
1: <%= form_for(@ticket) do |f| %>
2: <% if @ticket.errors.any? %>
3: <div id="error_explanation">
4: <h2><%= pluralize(@ticket.errors.count, "error") %> prohibited this ticket from being saved:</h2>
Трассировка включения шаблона: app / views / tickets/edit.html.erb
Rails.root: C: / home / workspace / App
Трассировка приложения:
app/views/tickets/_form.html.erb:1:in `_app_views_tickets__form_html_erb__464096833_36793764'
app/views/tickets/edit.html.erb:3:in `_app_views_tickets_edit_html_erb__750875298_37634784'
Запрос
Параметры:
{"key"=>:gameNumber,
"id"=>"1114"}