我正在创建一个应用程序,根据用户是否已经“担保”来突出显示来自流的用户消息。如果它是为单个作者设置的,它可以正常工作。例如
controller: @vouch = Vouch.last.vouched_user_nickname
view:
<% Twitter::Search.new(params[:id]).each do |tweet| %>
<li>
<%= image_tag tweet.profile_image_url %>
<% if @vouch.include? tweet.from_user %> <div class="flit_message_containerh">
<u> <a href="http://twitter.com/<%= tweet.from_user %>"> <%= tweet.from_user %></a></u> <%= linkup_mentions(auto_link(h tweet.text)) %>
<div class="time_ago">
<%= link_to distance_of_time_in_words_to_now(tweet.created_at) , tweet %>
<% else %> <div class="flit_message_container">
<u> <a href="http://twitter.com/<%= tweet.from_user %>"> <%= tweet.from_user %></a></u>
<%= linkup_mentions(auto_link(h tweet.text)) %>
<div class="time_ago">
<%= link_to distance_of_time_in_words_to_now(tweet.created_at) , tweet %>
<% end %>
但是我在为多个用户昵称做这件事时遇到了麻烦。
@vouch = Vouch.find(:all,
:select => "vouched_user_nickname",
:group => 'vouched_user_nickname'
)
任何想法都将不胜感激。我是铁杆菜鸟。
答案 0 :(得分:3)
假设你的Vouch
模型与Twitter源之间没有关系(我还没有使用过那个gem /插件,所以我不知道),一个解决方案就是拉出所有的Twitter条目你想要和控制器中的所有凭证,并在视图中进行检查。
@tweets = Twitter::Search.new(params[:id])
@vouches = Vouch.find(:all)
视图:
<% @tweets.each do |tweet| %>
<div class="flit_message_container<%=
@vouches.any? { |v| v.vouched_user_nickname == tweet.from_user } ? "h" : ""
%>">
...
</div>
<% end %>
答案 1 :(得分:0)
@vouch = Vouch.find_by_vouched_user_nickname(:all, ["nickname1","nickname2"])
答案 2 :(得分:0)
您的问题是您不知道要编写的正确控制器代码以找到 @vouch 数组吗?或者,一旦你得到它,你不知道如何处理数组?
view: <% if @vouch.include? tweet.from_user %>
.INCLUDE?如果tweet.from_user有一个对象也包含在@vouch数组中以获取控制器中的@vouch数组,则可以调用单个对象或对象数组的方法:
答案 3 :(得分:0)
您的问题似乎是您没有循环遍历数组,那么它如何决定某些元素是否符合您设置的标准?
示例,在您的视图中:
<% for vouch in @vouch do %>
<% if vouch.include? tweet.from_user %>
<div class="flit_message_containerh">
<u><a href="http://twitter.com/<%= tweet.from_user %>"> <%= tweet.from_user %></a></u> <%= linkup_mentions(auto_link(h tweet.text)) %>
<div class="time_ago">
<%= link_to distance_of_time_in_words_to_now(tweet.created_at) , tweet %>
<% else %> <div class="flit_message_container">
<u> <a href="http://twitter.com/<%= tweet.from_user %>"> <%= tweet.from_user %></a></u>
<%= linkup_mentions(auto_link(h tweet.text)) %>
<div class="time_ago">
<%= link_to distance_of_time_in_words_to_now(tweet.created_at) , tweet %>
<% end %>
<% end %>
答案 4 :(得分:0)
我看到了几个问题。 第一个是:
@vouch = Vouch.last.vouched_user_nickname
您正在使用名为@vouch
的变量来存储用户昵称。这是违反直觉的,会让其他人阅读你的代码(比如我自己)。请改用这样的东西:
@vouch = Vouch.last #on the controller
@vouch.vouched_used_nickname #on the view
这......当你试图做“多重”的例子时,“异国情调”的命名惯例会让你自己感到困惑:
@vouch = Vouch.find(:all,
:select => "vouched_user_nickname",
:group => 'vouched_user_nickname')
Activerecord的find(:all,...)将总是返回一个activerecord对象数组(或一个空数组)。你似乎期待一个字符串数组。如果你做Vouch.find,你将永远获得Vouches。
:选择部分只是限制了这些凭证的信息量(它们只附带了vouched_user_nickname。其余的,包括它们的id,是空的,因为它不是从数据库中读取的。)
如果你想拥有一系列用户昵称,你可以这样做:
# note the names. @vouchers in plural, and @nicknames for the user names
@vouchers = Vouch.find(:all, :select => "vouched_user_nickname",
:group => 'vouched_user_nickname')
@nicknames = @vouchers.collect{|v| v.vouched_user_nickname}