【问题标题】:Link_to remote => true causing strange routing problems, Rails 3Link_to remote => true 导致奇怪的路由问题,Rails 3
【发布时间】:2012-04-02 06:40:34
【问题描述】:

我在使用 link_to 远程向另一个控制器发送帖子时遇到了一些问题……结果与我期望的不太一样……

我在 node_content.html.erb 中有这个:

<% @node.videos.each do |vid| %>
 <div id="vid_vid"><%= link_to image_tag("http://img.youtube.com/vi/#{vid.content}/1.jpg"),  :controller => 'videos', :action => "iframize", :video_id => vid.id,  :method => :post,  :remote => true %></div>

 <% end %>

我在videos_controller中有这个:

  def iframize
   @video = Video.find(params[:video_id])
   respond_to do |format|
     format.js
   end
 end

这在路线中:

 resource :videos do
  collection do
   post 'iframize'
  end
end

问题是当我点击链接时,它会带我去

http://localhost:3000/videos/iframize?method=post&video_id=20

我得到了

Couldn't find Video with id=iframize

我浏览了几十个不同的例子,他们似乎推荐了上面的方法,但它不起作用..我做错了什么?

非常感谢任何输入!

谢谢!

编辑:

我尝试了这种方法 jquery 函数,它有点工作(当然只适用于循环中的第一个视频):

<% @node.videos.each do |vid| %>
  <%=  image_tag("http://img.youtube.com/vi/#{vid.content}/1.jpg", :id  => 'img_div') %>
<div id="vid_vid"> <%= vid.id %></div>
<% end %>



$('#img_div').on({
  'click': function() {
   var vid_id = document.getElementById("vid_vid").innerHTML;
   $.post("/videos/iframize/", {video_id: vid_id}); 
  }
 });

【问题讨论】:

  • 据我所知,您对 link_to 的使用是正确的。但是,错误信息表明问题出在路由上,而不是在链接上(这解释了link_to生成的错误url)。尝试运行rake routes 并确认您想要的路线在那里。我总是使用符号来表示路线,所以请尝试将post 'iframize' 切换为post :iframize

标签: ruby-on-rails ruby-on-rails-3 model-view-controller post link-to


【解决方案1】:

您是否在 assets/application.css 文件中通过 jquery_ujs 包含 rails_ujs

= link_to image_tag("http://img.youtube.com/vi/#{vid.content}/1.jpg"), "url_path", :method => :post,  :remote => true

将以下内容转换为rails路径:like iframeize_videos_path(通过rake routes生成)

:controller => 'videos', :action => "iframize", :video_id => vid.id,

【讨论】:

  • 这里是我的 rake 路线:iramize_videos POST /videos/iframize(.:format) {:action=>"iramize", :controller=>"videos"} 当我输入“iramize_videos_path”时,我得到了到 localhost/nodes/iframeize_videos
  • 哦,是的,我在 application.js 中有 jquery_ujs
  • 顺便说一句,你需要做 =link_to image_tag('path'), iframize_videos_path, :remote => true, :video_id => vid.id, :method => :post
  • 给出了同样的错误.. 我刚刚尝试了一个 jquery hack,它有点工作 - 我会更新这个问题,也许它会提供一些线索.. 非常感谢你的建议!
【解决方案2】:

需要区分url选项,html options.so使用

<%= link_to image_tag("http://img.youtube.com/vi/#{vid.content}/1.jpg"), 
{ :controller => 'videos', :action => "iframize", :video_id => vid.id },
{ :method => :post,  :remote => true} %>

【讨论】:

  • 尝试 iramize_videos_path(:video_id =>vid.id) 而不是 { :controller => 'videos', :action => "iramize", :video_id => vid.id }
  • 同样的效果..真的很奇怪
  • 对不起朋友,我已经说了我知道的可能的解决方案:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 2017-06-11
  • 1970-01-01
相关资源
最近更新 更多