#arrays #ruby-on-rails
#массивы #ruby-on-rails
Вопрос:
Я пытаюсь создать новый массив, который будет содержать только твиты пользователей, на которых вы подписаны, но я не уверен, как это должно быть сделано или, если возможно, и использовать этот массив для цикла, на мой взгляд
tweets_controller.rb
def index
@tweet = Tweet.new
Tweet.all.each do |tweet|
if current_user.following?(tweet.user) || (current_user.username === tweet.user.username)
return @tweets << tweet
end
end
end
tweets/index.html.erb
<div class="tweets-container">
<% @tweets.each do |tweet| %>
<div class="tweet-feed-container">
<strong><%= link_to "@#{tweet.user.username}", user_path(tweet.user), :class => 'tweet-username' %></strong>
· <small><%= tweet.created_at.strftime("%b %d, %Y %I:%M %p") %></small><br/>
<%= tweet.body %>
<% tweet.tags.each do |tag| %>
<%= link_to "#{tag.name}", tag_path(tag), :class => 'tweet-tag' %>
<% end %>
<% tweet.mentions.each do |mention| %>
<%= link_to "#{mention.name}", user_path(mention.name.sub('@', '')), :class => 'tweet-tag' %>
<% end %>
<%= link_to '↺', retweet_tweet_path(tweet.id), method: :post, :class => 'tweet-delete' %>
<%= link_to 'X', tweet_path(tweet), method: :delete, :class => 'tweet-delete' if current_user == tweet.user %>
</div>
<% end %>
</div>
Комментарии:
1. Привет @ayabbear, не могли бы вы поделиться своей моделью твитов и моделью пользователя с relation? Это еще один метод
following?
.2. @PalashBera обязательно отредактирует сообщение в одну секунду
3. привет @PalashBera, stackoverflow не позволит мне публиковать коды, говорит, что у меня слишком много кода, вы можете проверить это здесь github.com/ayabbear/tweeter
Ответ №1:
вы можете использовать это:
# app/controllers/tweets_controller.rb
def index
@tweet = Tweet.new
@tweets = Tweet.joins(user: :followees).where("followees.follower_id = ? OR tweets.user_id = ?", current_user.id, current_user.id).distinct
end
Комментарии:
1. привет, палаш! спасибо за ответ, он выдает мне ошибку «неправильное количество аргументов (задано 0, ожидается 1)»
2. Я думаю, вы совершаете ошибку в другом месте. Не могли бы вы вставить первые 3 строки вашей ошибки в комментарий?
3. Привет @ayabbear, я обновил ответ. Пожалуйста, попробуйте с этим.
4. привет, палаш! похоже, я получаю синтаксическую ошибку, я не уверен, куда поместить открывающую скобку или должна ли быть закрывающая скобка
5. Вы можете попробовать с моим ответом.
Ответ №2:
Это вернет все твиты пользователей, которым следует current_user
@tweets = Tweet.where(user_id: current_user.followees.select(:id))
Если вы хотите также включить твиты current_user, используйте запрос ниже
@tweets = Tweet.where(user_id: current_user.followees.select(:id)).or(Tweet.where(user_id: current_user.id))
Комментарии:
1. привет! спасибо за ответ, но я думаю, что этот отличается, он возвращает пользователей, у которых есть подписчики. то, что мне нужно, было больше похоже на фильтр, чтобы отображать только твиты пользователей, за которыми я слежу
2. @ayabbear ой, я виноват.. Я обновил свой ответ, не могли бы вы проверить сейчас?
3. привет, сампат! отлично! первый работает! но во втором я получаю сообщение об ошибке «неправильное количество аргументов (задано 0, ожидается 1)», я думаю, что это второй, который мне нужен
4. @ayabbear Я обновил свой ответ, не могли бы вы проверить сейчас?
5. ты спасаешь жизнь, Сампат, спасибо тебе! Теперь он работает отлично!