форма не обновляется для определенных рельсов записи

Я пытаюсь обновить запись с помощью кнопки, заставив пользователя-администратора подтвердить запись, нажав кнопку подтверждения отправки в этой форме, но она просто обновит первую запись в базе данных, а не конкретную. Могу ли я поместить «hour.id» в раздел form_for, чтобы он обновил запись, которую я хочу?

представление формы index.html.erb

<% @allhours.each do |hour| %>
              <tr id="dashfield">
                <td><%= hour.user.first_name + " " +hour.user.last_name %></td>
                <td><%= hour.assignment %></td>
                <td><%= hour.hours %></td>
                <td><%= hour.supervisor %></td>
                <td><%= hour.date %></td>
                <td><%= link_to "confirm", edit_hour_path(hour.id, :status => 'confirmed')%></td>
              </tr>
          <% end %>

Контроллер

def index
    @allhours = HourLog.where(status:'pending')
  end
  def update
    @hour = HourLog.find_by(status:'pending')
    @hour.update_attribute(update_hour_params)
    redirect_to '/dashboard/hours'
  end
def edit
    @hour = HourLog.find(params[:id])
    @hour.update_attributes(update_hour_params)
    redirect_to '/dashboard/hours'
  end

модель hour_log

class HourLog < ActiveRecord::Base
  belongs_to :user
end

маршруты

Rails.application.routes.draw do
  root 'welcome#index'
  get '/signup' => 'users#new'
  resources :users
  get '/dashboard/users' => 'users#index'
  put '/dashboard/users' => 'users#update'
  get '/login' => 'sessions#new'
  post '/login' => 'sessions#create'
  delete '/logout' => 'sessions#destroy'
  get '/dashboard' => 'hours#new'
  get '/dashboard/hours' => 'hours#index'
  put '/dashboard/hours' => 'hours#update'
  resources :hours

Спасибо!


person D Kucher    schedule 16.08.2015    source источник


Ответы (1)


Эта строка:

@hour = HourLog.find_by(status:'pending')

найдет первый Hourlog, который находится в состоянии ожидания. Вы должны передать идентификатор журнала часов в форме и использовать его в контроллере.

изменить строку в маршрутах:

put '/dashboard/hours/:id' => 'hours#update'

в представлении:

<%= form_tag dashboard_hours_path(id:hour.id), method: :put do %>
  <%= hidden_field_tag :role, :value => 'confirm'%>
  <%= submit_tag 'Confirm'%>
<% end %>

в контроллере:

@hour = HourLog.find(params[:id])
person Nicolas Maloeuvre    schedule 16.08.2015
comment
Я попытался и получил эту ошибку: неопределенный метод `hour_log_path' в Hours#index - person D Kucher; 16.08.2015
comment
Я использую индексное представление со многими записями одновременно, поэтому идентификатор не указан в URL-адресе. - person D Kucher; 16.08.2015
comment
каков сгенерированный URL-адрес в теге ‹form›? (вы должны увидеть использование «проверки») - person Nicolas Maloeuvre; 16.08.2015
comment
Я считаю, что это /dashboard/hours как в маршрутах - person D Kucher; 16.08.2015
comment
Изменить: добавить параметр id в маршрут +, используя form_tag вместо form_for (и добавив _tag - person Nicolas Maloeuvre; 16.08.2015
comment
я обновил представление и контроллер, и это, кажется, работает, за исключением того, что параметр hour_log пуст или отсутствует, что является базой данных и определенно там. любые решения? - person D Kucher; 16.08.2015
comment
Я провалил свою первую правку и переделал ее, у вас есть последняя? хммм hour_log пуст? не могли бы вы добавить трассировку стека, отредактировав свой вопрос (в конце)? - person Nicolas Maloeuvre; 16.08.2015
comment
извините, но я не знаю, как добавить трассировку стека или что такое трассировка стека - person D Kucher; 16.08.2015
comment
pp/views/hours/index.html.erb:61:in block (2 levels) in _app_views_hours_index_html_erb__695099359_27419400' app/views/hours/index.html.erb:60:in block in _app_views_hours_index_html_erb__695099359_27419400' app/views/hours/index.html.erb:53:in `_app_views_hours_index_html_erb__695099359_27419400' - person D Kucher; 16.08.2015
comment
это то, что я только что прокомментировал? - person D Kucher; 16.08.2015
comment
да, и вы можете видеть, что это написано в строке index.html.erb 60, поэтому вы должны увидеть, что происходит в этой строке - person Nicolas Maloeuvre; 16.08.2015
comment
ах, извините неправильная ошибка. В нем говорится, что параметры пусты, используя код, который у меня есть в моем вопросе, со ссылкой для редактирования. - person D Kucher; 16.08.2015
comment
Давайте продолжим это обсуждение в чате. - person Nicolas Maloeuvre; 16.08.2015