我正在尝试使用 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
不起作用。最后,链接的意图是充当“喜欢”按钮。它会创建一个推荐,然后再次显示当前页面。再次感谢您的帮助。
答案 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 %>