将变量从html传递给ruby on rails

时间:2016-11-10 07:35:06

标签: ruby-on-rails ruby ruby-on-rails-4

我是Ruby on Rails的新手,我想将变量从index.html.erb传递给search.html.erb文件,并在ruby代码中使用该变量。 换句话说,我在index.html.erb中有文字和提交按钮。如果我输入文本并按下按钮,它会将文本中的内容传递给search.html.erb并在ruby代码中使用该文本

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>

谢谢

4 个答案:

答案 0 :(得分:1)

您可以使用表单传递数据。

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

使用表单标记,您的params[:serach]在搜索操作中有值,或者您提交表单的位置。

答案 1 :(得分:1)

您必须在表单中提及使用用户输入的参数执行该操作的操作参数。在该操作中,您可以获取参数并在html页面中使用。

首先,我建议使用ruby form helper方法而不是普通的html,因为你可以轻松地构建你的表单(你可以使用像&#34; simple_form&#34这样的ruby gems;)

<%= 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

答案 2 :(得分:1)

首先,您需要正确构建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

现在您可以在views / search.html.erb中使用此变量,

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

答案 3 :(得分:0)

首先,如果您在初始化文件中添加twitter配置并使其可以全局访问,那将会更好。尽量避免在视图中使用太多逻辑。

e.g。

# 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

虽然搜索表格看起来像Pardeep 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>