【问题标题】:form not updating for specific record rails表格未针对特定记录轨道更新
【发布时间】:2015-08-16 00:17:30
【问题描述】:

我正在尝试使用按钮更新记录,让管理员用户 tyoe 通过单击此表单的确认提交按钮来确认记录,但它只会更新数据库中的第一条记录,而不是特定的记录.我可以将“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

小时日志模型

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4.1


    【解决方案1】:

    这一行:

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

    将找到第一个处于挂起状态的小时日志。您应该在表单中传递小时日志 id 并在控制器中使用它

    更改路线中的线路:

    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])
    

    【讨论】:

    • 我试过了,得到了这个错误:未定义的方法 `hour_log_path' in Hours#index
    • 我正在使用同时包含许多记录的索引视图,因此 id 未在 url 中指定
    • 标签中生成的 url 是什么? (你应该看到使用'inspect')
    • 我相信它是 /dashboard/hours 在路线中
    • 编辑:使用 form_tag 而不是 form_for 将 id 参数添加到 route+(并添加 _tag
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多