Rails:生成链接

时间:2015-12-03 11:46:59

标签: ruby-on-rails

我想通过组合我的数据库中的记录来生成超链接。这是一个例子:

token_id value is 123456789
user_name value is Peter
brand_id value is 8

token_id + brand_id + user_name应该组合成一个像unique_id这样的新数组,这样你就可以得到这个结果:

Unique_id=123456789-8-peter

然后我想将结果放在可点击的URL中,例如:       example.com/?campaign=XYZ?Unique_id=<%= unique_id%&gt;

你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

很难知道你在这里想要实现的目标,但我会猜测。

首先,这不是一个有效的网址:网址必须只有一个?,因为这会在路径结束并且参数开始时告诉它。 (如果你想要?在param值中,你需要对其进行url编码,但我不会认为这是你的想法)。有效网址的示例是

http://example.com?campaign=XYZ&unique_id=123456789-8-peter

有&#34; /&#34;作为路径然后两个参数(campaign和unique_id)

请注意,我已使用&#34; unique_id&#34; (downcased)作为第二个param名称:按惯例,param名称都是downcased。

制作链接:

<% unique_id = [token_id, user_name, brand_id].join("-") %>
<%= link_to home_path(:campaign => "XYZ", :unique_id => unique_id) %>

这假设您已经定义了一个名为&#34; home&#34;它指向&#34; /&#34;。这将需要指向一些控制器和默认操作,例如您的家庭控制器和&#34;索引&#34;行动。它还假设变量token_iduser_namebrand_id已在某处定义。

或者,您可能需要这样的网址,它会加载广告系列:

 http://example.com/campaigns/XYZ?unique_id=123456789-8-peter

注意路径现在是&#34; / campaigns / XYZ&#34;而不只是&#34; /&#34;。按照惯例,这会调用您的CampaignsController&#34; show&#34;行动,传递&#34; XYZ&#34;作为params [:id]。你还可以在params[:unique_id]获得123456789-8-peter。

要使用link_to帮助程序在rails中生成此链接,它可能类似于

<% unique_id = [token_id, user_name, brand_id].join("-") %>
<%= link_to campaign_path(@campaign, :unique_id => unique_id) %>

这需要定义@campaign。

答案 1 :(得分:1)

您可以添加到型号:

def to_param
  [token_id, brand_id, user_name.parameterize].join("-")
end

您可以在此处找到更多信息:Friendly URLs