自动填充 simple_form 个字段 - RAILS

Automatically populating simple_form fields - RAILS

假设我有一个客户和一个品牌 class(其中一个客户有很多品牌,一个品牌属于一个客户)。当用户在特定客户的展示页面上时,he/she 可以选择单击按钮以添加新品牌(该按钮重定向到表单以创建新品牌,其中包含一个字段,用户可以在其中应注明该品牌属于哪个客户)。但是,当用户进入该表单时,he/she 不必手动指示该品牌属于哪个客户,而是应该根据展示页面显示的客户的 customer_id 自动输入信息用户只是在看。如果未查看显示页面,则父 customer_id 字段应为空(默认情况下为空),用户应手动输入。

有没有办法在 Rails 中实现它?如果可以,怎么做?

在展示页面的 link 上,您可以看到这样的内容

<%= link_to 'New Brand', new_brand_path(customer_id: params[:id]) %>

然后在控制器中,您可以使用一些代码来检查 customer_id 是否存在于新操作的参数哈希中:

@brand.customer = Customer.find(params[:customer_id]) if params[:customer_id]

现在,当呈现表单时,假设使用 form_for @brand,将设置客户字段。

如果它们 link 来自另一个页面(除了显示),那么就不要在 link_to 方法中传入 customer_id: params[:id]称呼。会绕过controller中的if语句,customer为空

你的问题有点难懂,不过我们开始吧。

首先,您必须创建一个 link 新品牌,例如:

<%= link_to 'New brand for #{@customer.name}", new_brand_path(customer_id: @customer.id) %>

通过这种方式,您将 customer_id 作为参数传递。

在品牌控制器上你会做的新动作

def new
    @customer = Customer.find_by_id(params[:customer_id])        
    @brand = @customer ? Brand.new(customer_id: @customer.id) : Brand.new
end

你看我打个例子就说清楚了。有更好的方法可以做到这一点,但我想这会指导您完成所需的操作。

 @new_brand = @customer.brands.new  

它用正确的值

填充 @new_brand 中的 cusomer_id