我正在使用ruby 1.9.2,rails 3.1.3,devise 1.5.3,mysql,我的应用程序是关于调查的,现在所有用户都可以看到所有调查,但是我需要user1可以看到user1创建的调查,现在user1和user2等可以看到所有调查,身份验证模块是通过设计完成的,通过登录识别每个用户,在我的数据库中,我将user_id设置为外键,或者仅通过更改表tablename添加列user_id int(11)not null ;但是当我尝试创建新调查时,出现以下消息:Mysql2 :: Error:列“ user_id”不能为null:INSERT INTO asurveyscreated_atnameupdated_atuser_id)值('2012-02-29 12:39:34','encuesta音乐剧','2012-02-29 12:39:34',NULL)
*我的控制器:*

asurveys_controller.rb


  类AsurveysController   GET /asurveys.json
  
  定义指数
      @asurveys = current_user.asurveys
        response_do |格式|
        format.html#index.html.erb
        format.json {渲染json:@asurveys}
      结束

@asurvey = Asurvey.find(params[:id])
#@asurvey = current_user.asurveys.find(params[:id])
#current_user.asurveys = User.find(1)
respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @asurvey }
end   end

  
  #GET / asurveys / new#GET /asurveys/new.json #def新
      #@ asurvey = Asurvey.new
      #3.times {@ asurvey.questions.build}

#respond_to do |format|
#  format.html # new.html.erb
#  format.json { render json: @asurvey }
#end  #end   #ejemplo railscast para 3 preguntas y 4 respuestas   def new
      @asurvey = Asurvey.new

  
  3.次做
      问题= @ asurvey.questions.build
      4.times {question.answers.build}结束#
      #GET / asurveys / 1 / edit def编辑
      @asurvey = Asurvey.find(params [:id])结束
  
  #POST / asurveys#POST /asurveys.json def创建
          @asurvey = Asurvey.new(params [:asurvey])

respond_to do |format|
  if @asurvey.save
    format.html { redirect_to @asurvey, notice: 'Encuesta creada exitosamente.' }
    format.json { render json: @asurvey, status: :created, location: @asurvey }
  else
    format.html { render action: "nueva" }
    format.json { render json: @asurvey.errors, status: :unprocessable_entity }
  end
end   end

  
  #PUT / asurveys / 1#PUT /asurveys/1.json def更新
      @asurvey = Asurvey.find(params [:id])

respond_to do |format|
  if @asurvey.update_attributes(params[:asurvey])
    format.html { redirect_to @asurvey, notice: 'Encuesta actualizada exitosamente.' }
    format.json { head :ok }
  else
    format.html { render action: "editar" }
    format.json { render json: @asurvey.errors, status: :unprocessable_entity }
  end
end   end

  
  #DELETE / asurveys / 1#DELETE /asurveys/1.json def destroy
      @asurvey = Asurvey.find(params [:id])
      @ asurvey.destroy

respond_to do |format|
  format.html { redirect_to asurveys_url }
  format.json { head :ok }
end   end end



application_controller.rb


  类ApplicationController   protect_from_forgery
  
  def after_sign_in_path_for(资源)storedlocation_for(资源)|| bienvenido_path结束


我的模特


    class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  #codigo de asociacion, un usuario puede tener muchas encuestas, esta asociacio se hace para que 1 usuario pueda
  #tener muchas encuestas, pero cada encuesta solo tiene 1 usuario

  #codigo de prueba para asociar encuestas a un solo usuario
  #has_many :asurveys
  has_many :asurveys
  #, :foreign_key => :user_id, :class_name => 'User'
  #fin asociacion

  devise :database_authenticatable, :registerable,:confirmable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me,
                  :tipo_tarjeta, :numero_tarjeta, :fecha_vencimiento, :nombre_en_tarjeta,
                  :cvv, :nombre, :apellidos, :mail_facturacion, :mail_facturacion_alternativo,
                  :nombre_empresa, :pais, :direccion,:codigo_postal, :telefono, :numero_orden_compra

                  #validacion de presencia de campos, no pueden estar en blanco
  #validacion de presencia de campos, no pueden estar en blanco
  validates_presence_of :numero_tarjeta,
  :message => ": ingrese numero de tarjeta (15 digitos)"
  validates_presence_of  :nombre_en_tarjeta,
  :message => ": ingrese el nombre que aparece en su tarjeta"
  #validates_presence_of  :fecha_vencimiento,
  #:message => ": ingrese fecha de vencimiento de su tarjeta"
  validates_presence_of  :cvv,
  :message => ": ingrese cvv "
  #validacion de ingreso de campos "datos personales"
  validates_presence_of :nombre,
  :message => ": ingrese su nombre"
  validates_presence_of :apellidos,
  :message => ": ingrese sus apellidos"
  validates_presence_of :mail_facturacion,
  :message => ": ingrese mail de facturacion"
  validates_presence_of :mail_facturacion_alternativo,
  :message => ": ingrese mail alternativo de facturacion"
  validates_presence_of :nombre_empresa,
  :message => ": ingrese nombre de su empresa"
  validates_presence_of :direccion,
  :message => ": ingrese direccion de su empresa"
   validates_presence_of :codigo_postal,
  :message => ": ingrese codigo postal"
  validates_presence_of :telefono,
  :message => ": ingrese telefono de su empresa"
  validates_presence_of :numero_orden_compra,
  :message => ": ingrese numero de orden de compra"
  #largo de campos, formato mail
  validates_length_of :numero_tarjeta, :minimum => 16, :allow_blank => true, :message => "El numero debe tener al menos 16

  
  digitos de longitud”
        validates_length_of:nombre_en_tarjeta,:minimum => 2,:allow_blank => true,:message =>“最小2个角色”
        validates_length_of:cvv,:in => 3..4,:allow_blank => true,:message =>“(en Mastercard和Visa son los 3 ultimos digitos impresos
  美国运通公司的儿子阿尔索索·德拉塔耶塔·洛斯4 numeros impresos
  在塔尔吉塔的埃尔埃弗朗特河畔洛里亚
  缓解)”
        validates_length_of:nombre,:minimum => 2,::allow_blank => true,:message =>“最小2个角色”
        validates_length_of:apellidos,:minimum => 4,:allow_blank => true,:message =>“最小4个角色”
        validates_format_of:mail_facturacion,
        :with => /^[A-Z0-9._%-]+@([A-Z0-9]+.)+[AZ]{2,4}$/i,:message =>“ formatocorrecto ”
        validates_format_of:mail_facturacion_alternativo,
        :with => /^[A-Z0-9._%-]+@([A-Z0-9]+.)+[AZ]{2,4}$/i,:message =>“ formatocorrecto电邮alternativo”
        validates_length_of:nombre_empresa,:minimum => 4,:: allow_blank => true,:message =>“最小4个角色”
        validates_length_of:direccion,:minimum => 4,:allow_blank => true,:message =>“最小4个角色”
        validates_length_of:codigo_postal,:minimum => 7,:allow_blank => true,:message =>“最小7个角色”
        validates_length_of:telefono,:minimum => 7,:: allow_blank => true,:message =>“最小7个角色”
        validates_length_of:numero_orden_compra,:minimum => 2,:allow_blank => true,:message =>“最小2个角色”

  #validates_length_of :password, :minimum => 6, :allow_blank => false

  
  >结束
  
  类Asurvey   Encuestas puedan ser vistas soul por el usuario que la crea
  
  当属:用户
  
  :asurveys_users #has_many:users,:through =>:asurveys_users
  
  has_many:asurveys_users,:class_name =>“ User”,:through =>:asurveys_users #fin关联,不影响单独演奏
  
  usuario has_many:问题,:depend =>:destroy#:depend =>
  :destroy para que cuando eliminemos una encuesta se eliminentambién
  Todas sus preguntas。 accepts_nested_attributes_for:问题,
  :reject_if => lambda {| a | a [:content]。空白? },:allow_destroy =>
  true #accepts_nested_attributes_for para poder gestionar las
  进行调查。 Con esto podremos crear,实际可行
  实际的财产损失。
  
  萨尔瓦多·德·卡莱·德·塞拉克西翁的《经济学人》:_destroy。 Cuando tenga un valor true(cuando haya sido marcada),埃尔·里吉斯特罗·塞拉
  
  埃米尔米纳多·恩韦纳尔·埃尔公式里奥。 #User.find(1)。调查结束


意见


  Encuesta Nombre:  @ asurvey.name%>   @ asurvey.questions%>
      
        
       |   @asurvey,:confirm =>'Estas seguro / a?',:method =>:delete%> |
  


asurvey_helper


  模块AsurveysHelper端

最佳答案

要创建新调查,您应该执行以下操作:

current_user.asurveys.create(params[:assurvey])


要获取仅由登录用户创建的调查:

@asurveys = current_user.asurveys

关于mysql - Rails中的关联3将1个调查与1个用户关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9499586/

10-13 01:23