ActiveAdmin belongs_to 关系输入基于在 id 以外的属性上使用字符串框

ActiveAdmin belongs_to relationship input based using string box on attribute other than id

我在标准 rails 应用程序中使用 activeadmin。

我有商品belongs_to 用户关系

在 admin#items 表单上(编辑和新建)而不是 select 包含所有用户电子邮件等,我想要一个字符串文本字段,管理员可以在其中输入用户电子邮件而不是一个 id 或 selecting 一个从下拉列表中。

保存时我想验证该电子邮件是否属于某个用户,如果属于该用户,则将该项目分配给该用户。

我有

f.inputs "Item Details" do
    f.input :user, as: :string
end

然而,这在视图中显示了用户对象,我想接收一封电子邮件。

f.inputs "Item Details" do
    f.input :user_id, as: :string
end

在我想要电子邮件时输入 ID。

首先我添加了一个不是对象属性的参数,在本例中是对象的用户电子邮件。

f.input :user_email, as: :string, :input_html => { :value => f.object.user.try(:email) }

然后在更新和编辑方法的控制器中,我处理了该参数的处理。此外,为了避免模型出现问题,我在调用 super 之前删除了参数。这会通过用户的电子邮件将用户分配给该项目。

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