我正在为一个项目在ruby on rails上构建教程应用程序,我正在尝试在两个模型之间创建一个关联。
在我的数据库中,有用户,事件和出勤表与用户的电子邮件和事件的代码相关联。
我自己试图研究如何做到这一点,但每当我尝试向用户验证出席电子邮件时,它都声明用户不能空白,就像我试图创建一个新用户一样。
Ruby on Rails还是一个新手,所以任何建议都会受到赞赏!模型如下。
用户模型:
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password
has_many :attendances, inverse_of: :user
accepts_nested_attributes_for :attendances
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates(:name, presence: true, length: { maximum: 50 })
validates(:email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: {case_sensitive: false})
validates(:password, length: { minimum: 6 } )
validates(:password_confirmation, presence: true)
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
出勤率模型:
class Attendance < ActiveRecord::Base
attr_accessible :code, :email
belongs_to :user
validates_presence_of :user
end
到目前为止,我只是试图加强用户和出勤之间的关联,一旦我开始工作,我将对事件做同样的事情。另外,这是Rails 3.2.19和Ruby 1.9.3。
编辑:这是我用于表单的代码,我相信它的工作原理是因为在我将验证放入模型之前,它是在Attendance表中创建行。<% provide(:title, 'Test Event') %>
<h1>Attendance Registration</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for(@attendance) do |f| %>
<%= render 'shared/attendance_error_messages' %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :code %>
<%= f.text_field :code %>
<%= f.submit "Submit", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
此外,这是考勤控制器,如果有帮助的话。
class AttendancesController < ApplicationController
def new
@attendance = Attendance.new
end
def create
@attendance = Attendance.new(params[:attendance])
if @attendance.save
flash[:success] = "Attendance logged."
redirect_to root_path
else
render 'new'
end
end
end
答案 0 :(得分:0)
将此行添加到表单以避免用户出现错误
<%= f.hidden_field :user_id, current_user.id %>