rails link_to with block,controller options和html post

时间:2014-02-11 15:15:12

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

我正在尝试使用 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

不起作用。最后,链接的意图是充当“喜欢”按钮。它会创建一个推荐,然后再次显示当前页面。再次感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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吗?

答案 1 :(得分:0)

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