2016-03-20 15 views
1

Sadece tümleşik Posta Kutusu ve bir sorunla karşılaşıyorum. Yeni bir ileti gönderdiğimde mailboxer_notifications tablosundaki sender_id, gönderenin kimliği yerine her zaman sıfırdır.Rails gem 'Mailboxer' kullanarak ve sender_id her zaman sıfırdır

Kullanıcı adları için friendly_id gem kullanıyorum ve bu sorunun nerede olduğunu düşünüyorum ama nasıl düzeltileceğini öğrenemiyorum (sorun olsa bile).

mesajlar/new.html.erb

<% provide(:title, "New Message") %> 

<%= form_tag user_messages_path, method: :post do %> 

    <div class="form-group"> 
    <%= label_tag 'message[subject]', 'Subject' %> 
    <%= text_field_tag 'message[subject]', nil, class: 'form-control', required: true %> 
    </div> 

    <div class="form-group"> 
    <%= label_tag 'message[body]', 'Message' %> 
    <%= text_area_tag 'message[body]', nil, cols: 3, class: 'form-control', required: true %> 
    </div> 


<div class="form-group"> 
    <%= label_tag 'recipients', 'Choose recipients' %> 
    <%= select_tag 'recipients', recipients_options(@chosen_recipient), multiple: true, class: 'form-control chosen-it' %> 
</div> 

    <%= submit_tag 'Send', class: 'btn btn-primary' %> 
<% end %> 

messages_controller.rb taş entegre olduğunda çoğunlukla this tutorial takip

resources :users do 
    resources :conversations, only: [:index, :show, :destroy] do 
    member do 
     post :reply 
     post :restore 
     delete :empty_trash 
     post :mark_as_read 
    end 
    end 
    resources :messages, only: [:new, :create] 
end 

class MessagesController < ApplicationController 
    before_action :authenticate_user 

    def new 
    @user = current_user 
    @chosen_recipient = User.find_by(id: params[:to].to_i) if params[:to] 
    end 

    def create 
    @user = current_user 
    recipients = User.where(id: params['recipients']) 
    conversation = current_user.send_message(recipients, params[:message][:body], params[:message][:subject]).conversation 
    flash[:success] = "Message has been sent!" 
    redirect_to user_conversation_path(@user, conversation) 
    end 

    private 

    def authenticate_user 
    unless ((current_user.id = params[:user_id]) unless current_user.nil?) 
     flash[:error] = 'Looks like your not supposed to be there' 
     redirect_to login_path 
    end 
    end 
end 

routes.rb. Yeni bir mesaj gönderdiklerinde kullanıcı kimliğini neden doğru kaydetmediğinin hiçbir fikrim yok.

güncelleme sebebi friendly_id o yüzden mesela url dostu kimliği kullanmadığınızda çünkü sender_id 0 olarak kaydetmek neden olduğunu sanıyorum kullanıcı/1/mesajlar/yeni işe yaramaz ama kullanıcı/kullanıcı-kullanıcı/mesajlar/yeni mesaj oluştururken kullanıcı kimliğini kaydetmiyor

cevap

0

authenticate_user uygulamamı izleyeceğimden emin değilim:

def authenticate_user 
    unless ((current_user.id = params[:user_id]) unless current_user.nil?) 
    flash[:error] = 'Looks like your not supposed to be there' 
    redirect_to login_path 
    end 
end 

Bunu basitleştirmek isteyebilirsiniz.

current_user.id'u params[:user_id] ile karşılaştırmaya çalışıyorsanız, current_user.id = params[:user_id] numaralı telefonu değil, current_user.id == params[:user_id]'u kullanmanız gerekir. ==, = değil.

+0

Teşekkürler == 'yardımcı oldu, ancak şimdi hata alıyorum' Posta Kutusu bulunamadı :: '' İleti '= 2 [WHERE "mailboxer_notifications" ile ileti dizisi. "Type" =' Mailboxer :: Message 'AND " mailboxer_receipts "." receiver_id "=? VE "mailboxer_receipts". "Receiver_type" =?] 'Mesaj gönderdiğimde – Rob

İlgili konular