我在标准的rails应用程序中使用activeadmin。
我有物品belongs_to用户关系
在admin#items表单(编辑和新建)上,而不是选择包含所有用户电子邮件等,我想要一个字符串文本字段,管理员可以输入用户电子邮件而不是ID或从中选择一个下拉菜单。
在保存时,我想验证该电子邮件是否属于某个用户,并将该项目分配给该用户。
我有
f.inputs "Item Details" do
f.input :user, as: :string
end
但是,它会在视图中显示用户对象,我想收到一封电子邮件。
或
f.inputs "Item Details" do
f.input :user_id, as: :string
end
在我想要电子邮件时接收ID。
答案 0 :(得分:0)
首先,我添加了一个不是对象属性的参数,在这种情况下是对象的用户电子邮件。
f.input :user_email, as: :string, :input_html => { :value => f.object.user.try(:email) }
然后在控制器中进行更新和编辑方法,我处理了该参数的处理。另外,我在调用super之前删除了param,以避免模型出现问题。这会通过用户的电子邮件将用户分配给该项目。
def update
user = User.where(email: params[:item][:user_email]).first
if user
params[:item][:user_id] = user.id.to_s
params[:item].delete(:user_email)
super
else
flash[:notice] = "That email does not belong to a valid user"
redirect_to admin_group_path(params[:id])
end
end