【问题标题】:rails link_to with block, controller options and html post带有块、控制器选项和 html 帖子的 rails link_to
【发布时间】:2014-02-11 15:15:11
【问题描述】:

我正在尝试在 rails 4 中使用 link_to 与控制器和 html 选项以及 do..end 块。 我见过类似的发布但未能成功使用任何答案。

没有 do..end 块的工作代码:

<%= link_to 'recommend', { controller: 'recommendations', id: offer.id }, method: :post %>

当我尝试使用一些嵌入式 ruby​​ 向链接添加额外信息时,我无法让它工作:

<%= link_to( { controller: 'recommendations', id: offer.id }, method: :post) do %>
  <p>Some Html</p><%= offer.recommendations %>
<% end %>

代码编译,但在渲染中,生成的链接如下:

<a controller="recommendations" id="38">
  <p>Some Html</p>0
</a>

任何帮助将不胜感激。我认为这是语法上的一个小问题,但我尝试了各种括号、空格等,但我没有运气就可以想到。

更新:我尝试了以下代码但没有成功:

<%= link_to( { controller: 'recommendations', action: 'create', id: offer.id }, method: :post) do %>
  <p>Some Html</p><%= offer.recommendations %>
<% end %>

HTML 输出为:

<a action="create" controller="recommendations" id="39">
  <p>Some Html</p>0
</a>

这可能并不重要,但作为旁注,创建操作没有链接的帮助函数。当我运行

rake routes

我得到以下命令

...
recommendations GET     /recommendations(.:format)     recommendations#index
                POST    /recommendations(.:format)     recommendations#create
new_recommendation GET  /recommendations/new(.:format) recommendations#new
...

在我看来,这不是问题,但它是如下代码的原因:

link_to create_recommendation_path

行不通。最后,链接的目的是充当“喜欢”按钮。它创建一个推荐,然后再次显示当前页面。再次感谢您提前提供的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby erb link-to


    【解决方案1】:

    link_to create_recommendation_path 不起作用的原因是因为create_recommendation_path 没有命名路由,只有recommendations_path。您可以在您的路线列表中看到命名路线(您在上面的帖子中有)。来自路由的最左边的列显示了命名的路由。请注意,recommendations#create 在列表中没有条目。

    你可能会得到你想要的路径

    <%= link_to recommendations_path(:offer_id => offer.id), :method => :post do %>
        html stuff
    <% end %>
    

    这应该发布到一个看起来像这样的路径

    /recommendations?offer_id=<the offer id>
    

    (除了帖子数据将在标题中而不是在 URL 上) 如果create 方法会做类似的事情,这将起作用

    Recommendation.create(params)
    

    创建新推荐所需的唯一参数是offer_id

    我不明白你为什么要使用链接发布?创建推荐是否只需要一个优惠 ID?

    【讨论】:

    • 此解决方案适用于将哈希键 offer_id 更改为 id 以匹配我的控制器的小修改。该推荐只需要 offer_id 和经过身份验证的用户的 id,因此使用链接发布就足够了。感谢您的帮助!
    【解决方案2】:

    在您的link_to 中,您只指定了一个控制器,您还需要指定操作,否则它不知道将其路由到哪里。要么使用:

    <%= link_to({ controller: 'recommendations', action: 'show', id: offer.id }) do %>
      <p>Some Html</p><%= offer.recommendations %>
    <% end %>
    

    或者

    <%= link_to({ show_recommendations_path(id: offer.id) }) do %>
      <p>Some Html</p><%= offer.recommendations %>
    <% end %>
    

    【讨论】:

    • 在我的原始帖子中,第一个链接(没有代码块)无需任何操作即可正常工作。当我使用哈希方法(你的答案中的第一个)添加“创建”操作时,我得到以下 HTML 输出和一个非功能链接:&lt;a action="create" controller="recommendations" id="39"&gt; &lt;i class="fa fa-thumbs-o-up"&gt;&lt;/i&gt; (0) &lt;/a&gt;我将在原始帖子中添加更多详细信息。跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多