Rails关联不能为空

时间:2015-01-02 08:14:02

标签: ruby-on-rails ruby ruby-on-rails-3 associations

我正在为一个项目在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

1 个答案:

答案 0 :(得分:0)

将此行添加到表单以避免用户出现错误

<%= f.hidden_field :user_id, current_user.id %>