选项值中的link_to

时间:2013-02-15 11:45:19

标签: ruby-on-rails ajax ruby-on-rails-3 hyperlink

我试图找出是否可以使用link_to在选项值标记内执行Ajax请求

<option value="<%= link_to 'Manage Sandpiper Posts', posts_path(:type => 'Sandpiper'), :remote => true %>">Sandpiper</option>

因为选项值标记仅接受文本,此时输出无效且链接显然不起作用

我想要实现的是,在选择选项后,执行请求

如果有可能,有没有人有任何想法如何解决这个问题或者正确的语法是什么?

修改

当视口处于桌面大小并且工作正常时,我已经从下拉菜单中发出此Ajax请求,我通过

实现此目的
<%= link_to 'Sandpiper', posts_path(:type => 'Sandpiper'), :remote => true %>

Firebug返回

的参数
type = sandpiper

GET请求是

GET posts?type=Sandpiper

一切正常,网址保持为localhost:3000 /帖子,我的结果将被返回

现在当我在移动视图中使用select值时,返回的params与get请求相同,不同之处在于地址栏中的url转到

http://localhost:3000/posts?type=Sandpiper

并且没有返回任何结果。

控制器

def index
@posts = Post.all
@tynewyddpost = Post.tynewydd_posts
@woodsidepost = Post.woodside_posts
@sandpiperpost = Post.sandpiper_posts
@outreachpost = Post.outreach_posts
@companypost = Post.company_posts
@staffpost = Post.staff_posts

index.js.erb的

<% if params[:type] == 'Tynewydd'  %>
$('#newsResults').html('<%= escape_javascript(render partial: 'tynewyddposts') %>');
<% end %>

<% if params[:type] == 'Woodside'  %>
$('#newsResults').html('<%= escape_javascript(render partial: 'woodsideposts') %>');
<% end %>

我确实尝试更改我的控制器以匹配@SybariteManoj的控制器,但这也不起作用,虽然我认为我做同样的事情,只是以不同的方式

3 个答案:

答案 0 :(得分:2)

我假设请求是一个没有formdata的GET,你只使用select输入来选择一个url,但你想要的行为好像所选的url被'clicked': 使用jquery:

<select onchange="follow_link(this)">
<option value="<%= posts_path(:type => 'Sandpiper')%>">Sandpiper</option>
...
</select>

然后你的onchange功能:

follow_link = function() {
var url = $(this).val();
$.get(url);
}    

答案 1 :(得分:2)

我试图编辑Viktor的答案但是在同行评审之前它是不可见的。所以我在这里添加了更改。

<select onchange="follow_link(this)">
  <option value="<%= posts_path(:type => 'Sandpiper')%>">Sandpiper</option>
  <option value="<%= posts_path(:type => 'Outreach')%>">Outreach</option>
  <option value="<%= posts_path(:type => 'Tynewydd ')%>">Tynewydd </option>
  ...
</select>

更改将此参数作为参数传递给该函数。并更改选项的值。

follow_link = function() {
  var url = $(this).val();
  $.get(url);
}

更改修改了函数名称和变量url。

现在回答你的第二个问题,你可以在你的帖子中找到类似的东西#index action:

def index
  @type = params[:type]

  if @type.blank?
    @posts = Post.all
  else
    @posts = Post.where(:type => @type)
  end

  respond_to do |format|
    format.html
    format.js
  end
end

并在您的views / posts目录下添加一个新文件index.js.erb,其内容类似于:

<% if @type == 'Sandpiper' %>
  $('#some_container_id').html("<%= escape_javascript(render 'some_partial')")
<% elsif @type == 'Outreach' %>
  $('#some_container_id').html("<%= escape_javascript(render 'some_other_partial')")
<% else %>
  so on...
<% end %>

答案 2 :(得分:1)

您需要:onclick =&gt;“some_function()”而不是:remote =&gt; true.Then将id放在链接上并在application.js中获取链接并获取您要提交的表单并发送表格。

<强>更新

在application.rb中试试这个:

 jQuery(function($) {
   somemethod();
  });

function somemethod(){

jQuery("#id_of_the_option").bind("click", function() {
  //do something with the content
});

}