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