2016-11-10 2 views
0

Я новичок в Ruby on Rails и хочу передать переменную от index.html.erb до search.html.erb и использовать переменную в ruby-коде. Другими словами, у меня есть текст и кнопка отправки в index.html.erb. Если я ввожу текст и нажмите на кнопку она будет проходить, что в тексте search.html.erb и использовать этот текст в рубиновой кодпередать переменную от html до ruby ​​on rails

index.html.erb

<h1>Twitter</h1> 
<html> 
<form> 
    <input type = 'search' name = 'search' /></br> 
    <a href=/home/search><button type="button">Search</button></a> 
</form> 
</html> 

search.html.erb

<h1>Twitter</h1> 
<html> 
    <%= 
    require 'twitter' 
    client = Twitter::REST::Client.new do |config| 
     config.consumer_key  = "xxxxxxxxxxxxxxxxxx" 
     config.consumer_secret  = "xxxxxxxxxxxxxxxxxx" 
     config.access_token  = "xxxxxxxxxxxxxxxxxx" 
     config.access_token_secret = "xxxxxxxxxxxxxxxxxx" 
    end %> 
    <ul> 
    <%=client.search("**I want variable here**", result_type: "recent").take(5).collect do |tweet| %> 
     <li><%= "#{tweet.user.screen_name}: #{tweet.text}" %> </li> 
    <% end %> 
    </ul> 
</html> 

Thank you

+0

Старайтесь не делать, что внутри вашего зрения. Вы должны хранить такие вещи в своем контроллере, передавая их как «@ client». – tadman

+2

Кажется, что вы _really_ новичок и не имеете туманной идеи о том, как работает приложение rails, как оно должно быть организовано, как потоки данных и т. Д. Хотя я верю в «обучение на практике», это не сработает Ну вот. У вас будет намного больше времени, если вы сначала закончите учебник по рельсам. Или хорошая книга рельсов (например, Agile Web Development с Rails). Если вы этого не сделаете, вы будете _bound_, чтобы бороться с каждой частью пути. Структурированные знания не следует недооценивать. –

ответ

0

Прежде всего, вам нужно, чтобы ваш ERB структурированы правильно,

<% form_tag("/home/search", method: "get") do %> 
    <%=text_field_tag(:search)%> 
    <%=submit_tag("Search")%> 
<%end%> 

Вы можете отправить локальную переменную в контроллере, которая делает search.html.erb, что-то вроде этого,

get '/hello/search' do 
    search_text = params[:search] 
    render :search, :locals => {:your_variable => search_text} 
end 

теперь вы можете использовать эту переменную в просмотров/search.html.erb ,

<%=client.search(your_variable, result_type: "recent").take(5).collect do |tweet| %> 
1

Вы можете использовать форму для передачи данных.

<%form_for 'url_for_search_page_here' do %> 
    <%=text_field_tag :search%> 
    <%=submit_tag, "Search"%> 
<%end%> 

, используя тэг формы вы получили params[:serach] со значением в поисковой деятельности или где вы представить вам форму.

1

Вы должны указать параметр действия в своей форме, который переходит к этому действию с введенными пользователем параметрами. Внутри этого действия вы можете получить параметры и использовать их на своих html-страницах.

Прежде всего я предлагаю использовать формы рубинового вспомогательные методы вместо обычного HTML, потому что вы можете легко создавать свои формы (Вы можете использовать рубиновые камни, как «simple_form»)

<%= form_for "<search_url_here>" do |f| %> 
    <%= f.label :search %> 
    <%= f.text_field :search %> 
    <%= f.submit %> 
<% end %> 

В вашем методе поиска

def search 
    @search_term = params[:search] 
end 

в вашей странице search.html.erb вы можете получить доступ в @search_term

+0

, когда я набираю, а затем нажимаю поиск, чтобы перейти к search.html.erb, я получаю этот заблуждение «Нет совпадений маршрута [POST]»/home/index »в route.rb У меня есть get 'home/index', чтобы: 'home # index' get 'home/search', to: 'home # search' – Mohammed

+0

В общей форме будет использоваться метод по умолчанию как «post». Запрос имеет право как сообщение, когда пользовательский ввод отправляется на сервер с помощью пользователь должен ввести параметры. Поэтому в вашем файле route.rb вы должны указать: сообщение 'login' => 'sessions # create' –

+0

@Mohammed здесь, на ваших маршрутах.rb вам нужно написать: post 'search' => 'home #search ' –

0

Прежде всего, это будет намного лучше, если бы вы добавить конфигурацию щебета в файле инициализации и сделать его доступным во всем мире. По возможности старайтесь избегать слишком много логики в вашем представлении.

например.

# config/initializers/twitter.rb 
$twitter_client = Twitter::REST::Client.new do |config| 
      config.consumer_key = ENV['CONSUMER_KEY'] 
      config.consumer_secret = ENV['CONSUMER_SECRET'] 
      config.access_token = ENV['YOUR_ACCESS_TOKEN'] 
      config.access_token_secret = ENV['YOUR_ACCESS_SECRET'] 
      end 

в то время как форма поиска должна выглядеть так, как Пардип Saini посоветовал

#app/views/index.html.erb 

<%= form_tag 'your_path_for_search' do %> 
    <%=text_field_tag :search%> 
    <%=submit_tag, "Search"%> 
<% end %> 

затем на поисковой контроллер и вид

#app/controllers/search_controller.rb 

def search 
    @result = $twitter_client.search(params[:search], result_type: "recent").take(5) 
end 

#app/views/search.html.erb 
<ul> 
    <%= @result.each do |tweet| %> 
    <li><%= "#{tweet.user.screen_name}: #{tweet.text}" %> </li> 
    <% end %> 
</ul> 
Смежные вопросы