自动填充simple_form字段 - RAILS

时间:2015-12-14 17:29:09

标签: ruby-on-rails simple-form

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

有没有办法在Rails中实现这个?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:1)

你的问题有点难以理解,但我们走吧。

首先,您必须创建一个指向新品牌的链接,例如:

<%= 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

你看我做了一个例子来说明要做什么。有更好的方法可以做到这一点,但我想这会引导你完成你想要的。

答案 1 :(得分:0)

在显示页面的链接上,您可能会有类似这样的内容

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

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

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

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

如果他们从另一个页面(show除外)进行链接,那么就不要在link_to方法调用中传递customer_id:params [:id]。它将绕过控制器中的if语句,客户将为空白。

答案 2 :(得分:0)

 @new_brand = @customer.brands.new  

它使用正确的值

填充@new_brand中的cusomer_id