Я хочу получить все твиты, которые имеют определенный хэштег в них. Сначала я добавляю хештегов в моих 2 таблицы:Маршрутизация и поиск db ruby
def add_hashtags(tweet)
tweet.content.scan(/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/){ |tag|
@allhashes = Hashtag.all
@hash = Hashtag.find_by_name(tag[0].strip)
unless @hash
@hashtag = Hashtag.new(name: tag[0].strip)
@hashtag.save
@hashrel = Hashrelation.new(tweet_id: tweet.id, hashtag_id: @hashtag.id)
@hashrel.save
else
@hashrel = Hashrelation.new(tweet_id: tweet.id, hashtag_id: @hash.id)
@hashrel.save
end
}
end
, то я хочу, чтобы маршрут к шоу метода контроллера твит:
get 'tweets/show/(.:format)' => 'tweets#show', as: :hashtag
Ссылки в хэштегов являются следующие:
def twitify(tweet = '')
tweet.gsub(/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/) do |tag|
" " + link_to("#{tag.strip}", hashtag_path(tag.strip), {:name => tag.strip})
end.html_safe
end
И, наконец, показать способ контроллера твит:
def show
@hashtag = Hashtag.find_by_name(params[:name])
@tweet_ids = Hashrelation.find_by_hashtag_id(@hashtag.id)
@feed_items = Tweet.find_by_id(@tweets_ids.id)
end
Когда я нажимаю на ссылку, я получаю:
undefined method `id' for nil:NilClass
, что означает, что Params [: имя] либо Нилл или не нравится тот, у меня есть в БД.
Не могли бы вы, ребята, помочь мне понять это?
Ссылка, которую я вижу, называется 'http://localhost:3000/tweets/show/.%23dadawea'
, что означает, что у меня есть дополнительные вещи, почему бы мне?.
Вы можете сократить фактическое '#' от адреса. –
Я не знаю, как использовать lookbehind, я попробовал его, как этот tag.gsub! (Tag [0], ''), но он не работает. –
Для других: я изначально упоминал lookbehind , затем заметил подобный шаблон и вытер его из комментария. Затем я посмотрел документы и выяснил, что их там нет. –