ActiveAdmin属于基于使用除id之外的属性的字符串框的关系输入

时间:2016-04-15 19:36:29

标签: ruby-on-rails activeadmin

我在标准的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。

1 个答案:

答案 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