Ich bin neu auf Schienen. Ich möchte eine Suchfunktion für meine Rails-App hinzufügen. Der Benutzer kann nach den Gesprächen suchen, die er mit anderen Benutzern geführt hat. Bei dieser Suche kann er Schlüsselwörter der Nachrichten oder den Benutzernamen eingeben, den er gechattet hat. Kann jemand mir durch diese Führung ...Suchfunktion für Gespräche in Ruby auf Schienen
conversation.rb ist,
class Conversation < ActiveRecord::Base
belongs_to :sender, foreign_key: :sender_id, class_name: 'User'
belongs_to :recipient, foreign_key: :recipient_id, class_name: 'User'
has_many :messages, dependent: :destroy
validates_uniqueness_of :sender_id, scope: :recipient_id
scope :involving, -> (user) do
where("conversations.sender_id = ? OR conversations.recipient_id = ?", user.id, user.id)
end
scope :between, -> (sender_id, recipient_id) do
where("(conversations.sender_id = ? AND conversations.recipient_id = ?) OR (conversations.sender_id = ? AND conversations.recipient_id = ?)",
sender_id, recipient_id, recipient_id, sender_id)
end
end
message.rb ist, ist
class Message < ActiveRecord::Base
belongs_to :conversation
belongs_to :user
validates_presence_of :content, :conversation_id, :user_id
def message_time
created_at.strftime("%v")
end
end
conversations_controller.rb,
class ConversationsController < ApplicationController
before_action :authenticate_user!
def index
@users = User.all
@conversations = Conversation.involving(current_user)
end
def create
if Conversation.between(params[:sender_id], params[:recipient_id]).present?
@conversation = Conversation.between(params[:sender_id], params[:recipient_id]).first
else
@conversation = Conversation.create(conversation_params)
end
redirect_to conversation_messages_path(@conversation)
end
private
def conversation_params
params.permit(:sender_id, :recipient_id)
end
end
messages_controller.rb ist
class MessagesController < ApplicationController
before_action :authenticate_user!
before_action :set_conversation
def index
if current_user == @conversation.sender || current_user == @conversation.recipient
@other = current_user == @conversation.sender ? @conversation.recipient : @conversation.sender
@messages = @conversation.messages.order("created_at DESC")
else
redirect_to conversations_path, alert: "You don't have permission to view this."
end
end
def create
@message = @conversation.messages.new(message_params)
@messages = @conversation.messages.order("created_at DESC")
if @message.save
respond_to do |format|
format.js
end
end
end
private
def set_conversation
@conversation = Conversation.find(params[:conversation_id])
end
def message_params
params.require(:message).permit(:content, :user_id)
end
end
Kann mir jemand helfen, die Funktionalität für die Suche zu schreiben und die Ergebnisse der Suche anzuzeigen. Ich habe es in zwei verschiedenen Arten versucht, aber nicht funktioniert. Vielen Dank im Voraus
Nach dem Hinzufügen, wenn ich nach einer Nachricht suche, zeigt es alle Gespräche ...... die angezeigte URL ist [http: // localhost: 3000/conversations? Utf8 =% E2% 9C% 93 & search = hallo] aber es zeigt dieselbe Konversationsseite – MSK