我正在使用我的rails web应用程序中的消息传递系统,这应该让用户能够查看他们发送和接收的消息。已发送和已接收的消息在我的模型中定义为“to_messages”和“from_messages”。就目前而言,我能够为收件箱和发件箱显示相应的消息。当用户进入收件箱并单击收到的消息时,show动作将显示内容。但是,这不适用于发件箱中发送的邮件。当用户点击发件箱中发送的消息时,我收到一个错误,我怀疑我得到了错误,因为在我的消息控制器中,我只调用to_messages(收到的消息)。我知道我的控制器需要一个if / else语句,但我不知道如何写出来。对新手问题道歉,但有没有人有任何想法?谢谢!
messages_controller.rb
class MessagesController < ApplicationController
def index
@messages = current_user.to_messages
end
def outbox
type = (params[:type] && params[:type] == "sent" ) ? "from_messages" : "to_messages"
@messages = current_user.from_messages
end
def show
@message = current_user.to_messages.find params[:id]
end
def new
@message = Message.new
@recipient = User.find(params[:user_id])
end
def create
@message = Message.new message_params
@message.sender_id = current_user.id
if @message.save
flash[:success] = "Your message has been sent!"
redirect_to users_path
else
flash[:failure] = "Please try again."
redirect_to users_path
end
end
def destroy
@message = Message.find(params[:id])
@message.destroy
redirect_to messages_path
end
private
def message_params
params.require(:message).permit(:content, :sender_id, :recipient_id)
end
end
答案 0 :(得分:1)
您的发件箱消息的方法似乎试图处理&#39; from_messages&#39;和&#39; to_messages&#39;但随后对信息一无所知:
def outbox
type = (params[:type] && params[:type] == "sent" ) ? "from_messages" : "to_messages"
@messages = current_user.from_messages
end
一旦你有了类型(from_messages或to_messages),你就可以做到:
def outbox
type = (params[:type] && params[:type] == "sent" ) ? "from_messages" : "to_messages"
@messages = current_user.send(type.to_sym)
end
你的节目&#39;行动似乎也不是在处理from_messages。可能有必要在那里发送类型:
def show
type = (params[:type] && params[:type] == "sent" ) ? "from_messages" : "to_messages"
@message = current_user.send(type.to_sym).find params[:id]
end
这是一个干燥的解决方案:
class MessagesController < ApplicationController
before_action :find_type, only: [:outbox, :show]
def index
@messages = current_user.to_messages
end
def outbox
@messages = current_user.send(@type.to_sym)
end
def show
@message = current_user.send(@type.to_sym).find params[:id]
end
...
Rest of controller
...
private
def find_type
@type = (params[:type] && params[:type] == "sent" ) ? "from_messages" : "to_messages"
end
end
答案 1 :(得分:0)
我实际上已经明白了。 AllI必须做的是将我的Messages#show action中的代码更改为以下内容:
def show
@message = Message.find params[:id]
end
无论如何,谢谢你的帮助。