ruby-on-rails - 找不到没有 ID rails 4 记录的 HourLog

标签 ruby-on-rails ruby-on-rails-4

我试图只显示登录用户从数据库中创建的记录,但不知道该怎么做。当我尝试访问数据库并确定要从中提取的特定数据时出现错误。

时间 Controller

   class HoursController < ApplicationController
  before_action :require_user
  def new
    @hour = HourLog.where(:user_id => current_user.id)
    @entry = HourLog.all
  end
  def create
    @hour = HourLog.new(hour_params)
    @hour.User_id = current_user.id if current_user
    @hour.status = 'Pending'
    if @hour.save
      redirect_to '/dashboard'
    end
  end
  private
  def hour_params
    params.require(:hour_log).permit(:assignment, :hours, :supervisor, :date,)
  end
end

营业时间 View (new.html.erb)(将数据输入数据库的字段)

<% @entry.each do |hour| %>
              <tr>
                <td><%= hour.assignment %></td>
                <td><%= hour.hours %></td>
                <td><%= hour.supervisor %></td>
                <td><%= hour.date %></td>
                <td><%= hour.status %></td>
              </tr>
          <% end.empty? %>
          <%= form_for(@hour, url: hours_path) do |f|%>
              <tr>
                <td id="dashfield"><%=f.text_field :assignment, :placeholder=> "Assignment"%></td>
                <td id="dashfiled"><%=f.text_field :hours, :placeholder => "Hours"%></td>
                <td id="dashfield"><%=f.text_field :supervisor, :placeholder=> "Supervisor/Location"%></td>
                <td id="dashfield"><%=f.date_field :date, :placeholder=> "Date"%></td>
                <%=f.hidden_field :status, :value => "Pending" %>
                <%=f.hidden_field :User_id, :value => current_user.id %>
                <td id="dashbtn"><%=f.submit 'Create' %></td>
              </tr>
          <%end%>

错误:

Started GET "/dashboard" for 127.0.0.1 at 2015-08-10 17:29:08 -0500
Processing by HoursController#new as HTML
  User Load (0.0ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = ? LIMIT 1  [["id", 4]]
Completed 404 Not Found in 18ms

ActiveRecord::RecordNotFound (Couldn't find HourLog without an ID):
  app/controllers/hours_controller.rb:4:in `new'

谢谢!

最佳答案

我认为这个功能:

def new
   @hour = HourLog.where(:user_id => current_user.id)
   @entry = HourLog.all
end

应该改为:

def new
   @hour = current_user.hour_logs.new
   @entry = current_user.hour_logs.all
end

假设模型user配置了has_many :hour_logs

在您的模型中,user 有许多 hour_logshour_logs 必须有一个列 user_id大写

要将列名从 User_id 更改为 user_id,您需要创建一个新的迁移。 在命令提示符下导航到 rails app 文件夹并执行:

rails g migration fixcolumn1

这将在 your-app-path/db/migrate 中生成一个名为 some-date_fixcolumn1.rb 的文件 编辑此文件,以便出现以下内容:

def change
  rename_column :hour_logs, :User_id, :user_id
end

之后回到提示符处执行

rake db:migrate

它应该从那里开始工作

关于ruby-on-rails - 找不到没有 ID rails 4 记录的 HourLog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930295/

相关文章:

ruby-on-rails - rails将参数传递给 'new'方法

ruby-on-rails - 使用嵌套的case语句返回值

ruby-on-rails - Rails 错误 : accepts_nested_attributes_for is not updating my has_many association

ruby-on-rails - Rails 优化查询并遍历大型实体

ruby-on-rails - Rails form.select 属性显示不同的值

jquery - ruby on Rails - 如何使用ajax读取json文件?

jquery - Ruby on Rails : jQuery datepicker only works when refresh page

ruby-on-rails - 如何更改路线名称 rails 4

ruby - 在数组中找到最接近给定值的数字

ruby-on-rails - 如何仅在注册时使用 rails devise 验证某些字段