我正在使用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 asurveys
(created_at
,name
,updated_at
,user_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/