Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何创建链接到和操作的href标记';创建';_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何创建链接到和操作的href标记';创建';

Ruby on rails 如何创建链接到和操作的href标记';创建';,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想创建一个href标记,如href=contacts/create。在我的联系人控制器中,我有一个创建获取操作。我知道这违反了rails的惯例。我仍然需要使用options={controller=>'contacts',action=>'create'}创建上面的链接。它适用于您提到的任何其他任意操作名称,这违反了rails惯例,但如果绝对必要,您可以从控制器执行此操作: options = {controller=> 'contacts', action=>'create'}

我想创建一个href标记,如
href=contacts/create
。在我的联系人控制器中,我有一个创建获取操作。我知道这违反了rails的惯例。我仍然需要使用
options={controller=>'contacts',action=>'create'}
创建上面的链接。它适用于您提到的任何其他任意操作名称,这违反了rails惯例,但如果绝对必要,您可以从控制器执行此操作:

options = {controller=> 'contacts', action=>'create'}
view_context.link_to url_for(options)
如果需要href仅作为路径,可以执行以下操作:

options = {controller=> 'contacts', action=>'create'}
view_context.link_to url_for(options.merge(only_path: true))

正如您所提到的,这是违反rails惯例的,但如果绝对必要,您可以从控制器执行此操作:

options = {controller=> 'contacts', action=>'create'}
view_context.link_to url_for(options)
如果需要href仅作为路径,可以执行以下操作:

options = {controller=> 'contacts', action=>'create'}
view_context.link_to url_for(options.merge(only_path: true))

首先,这真是个坏主意。你不仅仅是在蔑视传统——你让自己和你的用户处于一个非常糟糕的时期,因为例如,按下后退和前进按钮会导致资源被一次又一次地创建。而且,保证有更好的方法来解决您试图做的任何事情,例如:

# a "discrete form"
<%= button_to "Create contact", contacts_path, method: :post %>
# or use the rails ujs 
<%= link_to "Create contact", contacts_path, method: :post %>
您现在可以执行以下操作:

<%= link_to "Create", { controller: 'contacts', action: 'create' } %>


恭喜你,你断了互联网。

首先,这真是个坏主意。你不仅仅是在蔑视传统——你让自己和你的用户处于一个非常糟糕的时期,因为例如,按下后退和前进按钮会导致资源被一次又一次地创建。而且,保证有更好的方法来解决您试图做的任何事情,例如:

# a "discrete form"
<%= button_to "Create contact", contacts_path, method: :post %>
# or use the rails ujs 
<%= link_to "Create contact", contacts_path, method: :post %>
您现在可以执行以下操作:

<%= link_to "Create", { controller: 'contacts', action: 'create' } %>


祝贺您,您断开了Internet。

您可以使用硬编码路径选项:

<%= link_to "Create", "contacts/create" %>
<%= link_to "Create", { controller: "contacts", action: "create" } %>

或Rails生成的路径选项:

<%= link_to "Create", "contacts/create" %>
<%= link_to "Create", { controller: "contacts", action: "create" } %>

这不仅违背了Rails的约定,而且违背了HTTP的使用。这通常会导致你无法提前预测的严重问题。网络爬网只是其中之一,谷歌机器人(GoogleBot)只是通过对页面进行爬网,就意外地在数据库中创建了一个新联系人。或者给那些发现你有一个create链接的孩子编写脚本,然后快速连续地发送100000次点击


许多其他问题也会发生类似的情况,包括在一个众所周知的时间,Google Chrome预取从页面获取URL以“加速用户体验”;使用这种技术的网站都能感受到这一点。这不是空闲警告或样式问题:这可能会对您的站点造成灾难性影响。

您可以使用硬编码路径选项:

<%= link_to "Create", "contacts/create" %>
<%= link_to "Create", { controller: "contacts", action: "create" } %>

或Rails生成的路径选项:

<%= link_to "Create", "contacts/create" %>
<%= link_to "Create", { controller: "contacts", action: "create" } %>

这不仅违背了Rails的约定,而且违背了HTTP的使用。这通常会导致你无法提前预测的严重问题。网络爬网只是其中之一,谷歌机器人(GoogleBot)只是通过对页面进行爬网,就意外地在数据库中创建了一个新联系人。或者给那些发现你有一个create链接的孩子编写脚本,然后快速连续地发送100000次点击


许多其他问题也会发生类似的情况,包括在一个众所周知的时间,Google Chrome预取从页面获取URL以“加速用户体验”;使用这种技术的网站都能感受到这一点。这不是一个无聊的警告或风格问题:这可能会给你的网站带来灾难性的影响。

哈哈“恭喜你打破了互联网”我喜欢这样:幸好这是遗留代码!!有人做了一些很好的工作:(哈哈“恭喜你打破了互联网”我喜欢这样:幸好这是遗留代码!!有人做了一些很好的工作:(@yatishmehta如果这已经回答了您的问题,请单击答案旁边的复选标记接受它。复选标记将变为绿色。我们也非常感谢您的投票:D@yatishmehta如果这已回答了您的问题,请单击答案旁边的复选标记接受它。复选标记将变为绿色。投票也总是很受欢迎的。:D