update_attributes с нестандартной формой - PullRequest
0 голосов
/ 20 марта 2011

Я собрал форму из-за некоторых странностей в моем коде и маршрутах. Вещи работают для добавления данных в базу данных, но я не могу понять, как обновить данные. Вот некоторый код.

new.html.erb

<% form_tag '/list' do %>
    Episodes Completed: 
    <%= text_field_tag "completed"  %>
    Watch Status
    <%= collection_select(nil, 'id', @show_status, :id, :state) %>
    <%= hidden_field_tag('show_id', @show.id) %>
    <%= submit_tag 'Add' %>
<% end %>

edit.html.erb

<% form_tag("/list/#{@show_completion.show.id}", :method => :put ) do %>
    Episodes Completed: 
    <%= text_field_tag "completed", @show_completion.episodes_completed  %>
    Watch Status
    <%= collection_select(nil, 'id', @show_status, :id, :state) %>
    <%= hidden_field_tag('show_id', @show_completion.show.id) %>
    <%= submit_tag 'Edit' %>
<% end %>

Вот методы контроллера и создание и обновление

def create
  @show_completetion = ShowCompletionStatus.new
  @show_completetion.user_id = current_user.id
  @show_completetion.episodes_completed = params[:completed]
  @show_completetion.status_state_id = params[:id]
  @show_completetion.show_id = params[:show_id]
  @show_completetion.save
end

def update
  @show_completion = ShowCompletionStatus.find(params[:id])

  @show_completion.episodes_completed = params[:completed]
  @show_completion.status_state_id = params[:id]
  @show_completion.show_id = params[:show_id]

  if @show_completion.update_attribute('episodes_completed', params[:completed])
    redirect_to "/list/#{current_user.username}"
  else
     redirect_to "/list/#{params[:id]}/edit"
  end
end

Вот мои маршруты для них:

match "list/" => "list#create", :via => :post
match "list/new/:show_id" => "list#new", :constraints => { :show_id => /[0-9]+/ }
match "list/:id/edit" => "list#edit", :constraints => { :id => /[0-9]+/ }, :via => :get
match "list/:id" => "list#update", :constraints => { :id => /[0-9]+/ }, :via => :put

Я пробовал разные вещи, чтобы заставить это работать на протяжении большей части 4 часов. Я думаю, что я что-то упускаю, но я просто не вижу этого.

Есть ли лучший способ сделать форму, которая заставляет ее работать лучше?

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Я решил эту проблему, создав хеш и передав его в атрибуты обновления с парами ключ-значение того, какими будут атрибуты объектов.Поскольку updates_attributes принимает хеш, а не объект, после установления соединения это было простое решение.

0 голосов
/ 20 марта 2011

Попробуйте заменить update_attribute вызов на save вызов.

Кроме того, если вы пишете все с нуля, а не с помощью встроенных функций, попробуйте использовать save! вместо save: в случае сбоя оно вызовет исключение, в отличие от простого save, который просто возвращает false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...