我一直在尝试为我的站点构建一个使用devise进行身份验证的消息传递系统。它要求的功能是能够将消息发送给一个或多个收件人(最好同时列出用户的清单)。搜索了一会儿之后,我发现了一些类似gem的东西,例如mailboxer,但是我并不需要它的所有功能,而是想构建自己的系统来学习(仍然是一个新手)。
我遵循了这个古老的教程(http://web.archive.org/web/20100823114059/http://www.novawave.net/public/rails_messaging_tutorial.html)。我意识到这是一个非常古老的教程,但这是我唯一能找到与我想要达到的目标相匹配的教程。
在我的代码不起作用之后,我将教程跟随到了T甚至从教程中复制并粘贴了代码。
尝试访问http:// localhost:3000 / mailbox时,MailboxController#index中出现NoMethodError
undefined method `messages' for nil:NilClass
app/controllers/mailbox_controller.rb:12:in `show'
app/controllers/mailbox_controller.rb:6:in `index'
我还引用了这个问题Rails 3:Folder的未定义方法消息,该消息与我有相同的错误,但是该主题似乎无处可去。
Mailbox_controller.rb
class MailboxController < ApplicationController
def index
@folder = current_user.inbox
show
render :action => "show"
end
def show
@folder ||= current_user.folders.find_by(params[:id])
@messages = @folder.messages :include => :message, :order => "messages.created_at DESC"
end
end
型号/folder.rb
class Folder < ActiveRecord::Base
acts_as_tree
belongs_to :user
has_many :messages, :class_name => "MessageCopy"
end
对此的任何帮助都会很棒,如果需要更多信息,也请告诉我,并将其发布。
最后,我做了一些修改来弄清楚消息传递系统。我想发布我的整个解决方案,因为这给我带来了困难,并且可能对其他人有用。我将其保持得非常简单,并且不包括首先给我带来问题的文件夹模型,但仍然起作用。
这是我的协会
型号/message.rb
attr_reader :user_tokens
belongs_to :sender, :class_name => 'User'
has_many :recipients
has_many :users, :through => :recipients
def user_tokens=(ids)
self.user_ids = ids
end
模型/收件人.rb
belongs_to :message
belongs_to :user
型号/user.rb
has_many :messages, :foreign_key => :sender_id
这是我的邮件控制器
messages_controller.rb
def new
@message = Message.new
@user = current_user.following
@users = User.all
# @friends = User.pluck(:name, :id).sort
end
def create
@message = current_user.messages.build(message_params)
if @message.save
flash[:success] = "Message Sent!"
redirect_to messages_path
else
flash[:notice] = "Oops!"
render 'new'
end
end
def index
@user = User.find(current_user)
@messages = Recipient.where(:user_id => @user).order("created_at DESC")
end
private
def message_params
params.require(:message).permit(:body, :sender_id, user_tokens: [])
end
我的看法
_form.html.erb
</div>
<!-- displays the current users frinds their following -->
<%= f.select :user_tokens, @user.collect {|x| [x.name, x.id]}, {}, :multiple => true, class: "form-control" %>
<br>
<div class="modal-footer">
<%= f.button :submit, class: "btn btn-primary" %>
</div>
架构图
messages_table
t.text "body"
t.integer "sender_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "body_html"
receivers_table
t.integer "message_id"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
我希望这有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句