为什么我的变量仅在视图中为null?

时间:2018-07-30 10:29:42

标签: ruby-on-rails

我正在向TheMovieDb发送请求,并试图将结果显示在同一页面上。

home.html.erb

<h1>Welcome here</h1>

<%= form_tag(root_path, remote: true, :controller => "pages", :action => 
"home", :method => "get", :class => "form") do %>
    <%= label_tag(:q, "Search for:") %>
    <%= text_field_tag(:q) %>
    <%= submit_tag("Search", :class => "submit") %>
<% end %>

<% if @result %>
    <%= puts @result %>
    <div><%= @result %></div>
<% end %>


<script type="text/javascript">
  document.querySelector('.form').addEventListener('submit', () => {
      console.log('<%= @result.to_json %>');
  });
</script>

pages_controller.rb

def home
    require 'uri'
    require 'net/http'

    @search = params[:q]

    url = URI("https://api.themoviedb.org/3/search/movie?api_key=my_api_key&query=#{@search}")

    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE

    request = Net::HTTP::Get.new(url)
    request.body = "{}"
    response = http.request(request)

    if response.is_a?(Net::HTTPSuccess) === true
        @result = JSON.parse(response.read_body)
        puts @result
        render json: @result
    end
end

我不明白为什么我的变量在视图中等于null,但是我可以在控制台中看到结果。

有人可以解释我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

我假设您是在问“为什么我提交表单并呈现json响应后,为什么我的@result不在这里?”

  document.querySelector('.form').addEventListener('submit', () => {
      console.log('<%= @result.to_json %>');
  });

答案是:因为@result在呈现页面后不存在。检查您生成的html(浏览器中的“查看页面源”)。您会在这里看到它。

<script type="text/javascript">
  document.querySelector('.form').addEventListener('submit', () => {
      console.log('null');
  });
</script>

看看本指南,应该清除一些混乱:Working with Javascript in Rails