0

在我的 Rails 应用程序中,我有两个控制器,即 tweets_controller 和坐标控制器。在我的最终视图中,我想使用坐标控制器中的条件显示 tweets_controller 的属性。我面临的问题是 tweets_controller 应该知道坐标控制器的变量。我的坐标控制器代码

def CoordinatesHelper.query()
  a = Coordinates.where(city: params[:show])
  b = a.first
  if a.count == 1
    latitude = b.latitude
    longitude= b.longitude
  end

  if(latitude=0 && longitude=0) 
    sql="Select * from tweets where tweet_text LIKE '%text%' AND user_loc LIKE 'show' order by id desc LIMIT 30"
  else if (latitude!=0 && longitude!=0) 
         min_lat = latitude - 1.0
         max_lat = latitude + 1.0
         min_lng = longitude - 1.0
         max_lng =  longitude + 1.0
         sql = "Select * from tweets where tweet_text LIKE '%text%' AND ( ((longitude BETWEEN min_lng and max_lng) AND (latitude BETWEEN min_lat and max_lat)) OR (user_loc LIKE 'show') ) order by id desc LIMIT 30"
       else
         sql="Select * from  tweets where tweet_text LIKE  '%text%' LIMIT 30"
       end  

  end
end     

我的 tweets_controller 只显示 tweets 表的属性。使用 tweets_controller 中的定义“索引”。纬度、经度等条件来自坐标表,有什么方法可以使 tweets_controller 能够评估坐标表纬度,经度,然后在最终视图中显示推文。准确地说,坐标控制器在搜索按钮中有纬度、经度和城市变量,以及参数[:show]。tweets_controller 应该可以访问坐标控制器的属性。我该怎么做?

<%= @tweets.each do |tweets| %>

<ul>

  <li><%= tweets.id %></li>
  <li><%= tweets.tweet_created_at %></li>

  <li><%= tweets.tweet_source %></li>
  <li><%= tweets.tweet_text %></li>
  <li><%= tweets.user_id %></li>
  <li><%= tweets.user_name %></li>
  <li><%= tweets.user_sc_name %></li>
<li><%= tweets.user_loc %></li>
  <li><%= tweets.user_img %></li>
  <li><%= tweets.longitude %></li>
  <li><%= tweets.latitude %></li>
<li><%= tweets.place %></li>
  <li><%= tweets.country %></li>

</ul>
<% end %>

这是最终的视图内容,为了显示它,纬度和经度的条件在坐标表中

4

1 回答 1

0

您需要的是在 Tweet 模型和 Coordinate 模型之间的模型级别的关联,如下所示:

class Tweet < ActiveRecord::Base
  has_one :coordinate
end

这说明一条推文有坐标。

问题不在于从一个控制器访问变量到另一个控制器(除非它是父子控制器,否则永远不会发生),而是问题在于您没有正确设置模型之间的关联。

于 2013-08-02T10:03:28.113 回答