2013-02-15 3 views
0

Я пытаюсь выяснить, могу ли я использовать link_to выполняя запрос Ajax в пределах значения опции тегаlink_to в Option Value

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

Поскольку значение параметра тега принимает только текст вывод неверен в данный момент и связь, очевидно, не работает

что я хочу добиться того, что при выборе опции запрос проводит

кто-нибудь есть какие-либо идеи, как обойти это или то, что правильный синтаксис будет, если это возможно?

EDIT

Я уже сделать этот запрос Ajax из в раскрывающемся меню, когда окно просмотра размера рабочего стола и это прекрасно работает, я достичь этого

<%= link_to 'Sandpiper', posts_path(:type => 'Sandpiper'), :remote => true %> 

Firebug возвращает Params из

type = sandpiper 

запрос GET является

GET posts?type=Sandpiper 

Это все работает отлично и URL остается в локальном хосте: 3000/сообщений и мои результаты возвращаются

Теперь, когда я нахожусь в мобильном режиме с помощью выбора значения возвращаемого PARAMS такого же, как и запроса получит, разница является адресом в адресной строке, составляет

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, но это не сработало, хотя я думаю, что делать то же самое, просто по-другому

+2

любая конкретная причина уценки? Было бы полезно, если бы вы поддержали его по причине, а не просто уценкой – Richlewis

+1

, какого поведения вы хотите достичь? –

+0

При щелчке по опции он изменит значение выпадающего списка, поэтому почему бы просто не использовать событие 'onchange' для выпадающего списка для вызова ajax. –

ответ

2

Я попытался отредактировать ответ Виктора, но он не будет виден, пока он не рассмотрит его. Поэтому я добавляю изменения здесь.

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

Теперь, чтобы ответить на ваш второй вопрос, вы можете иметь что-то вроде этого в сообщениях # указательных действий:

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 

и добавить новый файл 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 %> 
+0

ok просто обновить, я теперь получаю Нет совпадений маршрута [GET] "/ Sandpiper "при нажатии ссылки на песочницу – Richlewis

+0

, какой url вы используете для вызова ajax? не должно быть '/ posts? type = Sandpiper'? –

+0

Ну, я попробовал путь @ViktorTron, см. Последний комментарий в своем ответе, у меня будет 6 значений параметров, каждый из которых вызывает другой запрос, так что кудряк, аутрич, tynewydd и т. Д., Поэтому я не могу использовать эксплойты Sandpiper в этой функции? Надеюсь, что это имеет смысл, оцените вашу помощь, кстати, спасибо – Richlewis

1

Вам нужно have: onclick => "some_function()" вместо: remote => true.Then вставить id в ссылку и в application.js получить ссылку и получить форму, которую вы хотите отправить и отправить форму.

UPDATE

попробовать с этим в приложении.гь:

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

функция SomeMethod() {

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

}

+0

спасибо за ваш ответ, но у меня все еще есть проблема использования link_to в значении параметра dont I. Должен ли я просто использовать нормальную ссылку href, а затем использовать jquery для запуска запроса Ajax с помощью .click (function () – Richlewis

+0

Я думаю, что я вас не понимаю. Этот вариант из формы, и вы должны отправить форму с помощью ajax, когда эта опция выбрана? –

+0

извинения, опция выбирает часть навигационной панели для видовых экранов 480 пикселей и ниже (мобильные устройства) Я хочу сделать запрос ajax, когда вы нажимаете на опцию, чтобы показывать другой контент. – Richlewis

2

я предполагаю, что запрос является GET, без данных формы, вы используете только выберите вход, чтобы выбрать URL, но вы хочу поведение, как будто выбранный URL был 'щелкнул': с помощью JQuery:

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

, то ваша функция обмена:

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

Да, это его запрос GET, просто показывающий различный контент. Я дам эту попытку позже, я был просто сбит с толку, так как я не думал, что могу передать link_to в пределах значения параметра, хотя, я думаю, функция позаботится об этом? Спасибо, кстати, – Richlewis

+0

@ Richlewis Это своего рода то, что я имел в виду. Но с несколькими изменениями. –

+0

link_to просто создаст опцию isf внутри (экранированную), которая не то, что вы хотите. побег все еще может быть проблемой. кто угодно? –

Смежные вопросы