簡體   English   中英

在Ruby-on-Rails上,可以從控制器傳遞變量以通過response_to查看嗎?

[英]On Ruby-on-Rails it's possible to pass variables from controller to view through respond_to?

我要提交一條消息,然后顯示一條消息並打開一個彈出窗口。 郵件已正確保存在數據庫中,但未顯示該郵件,相反,我收到了此郵件

NoMethodError in Private::Conversations#create
Showing /var/www/appror/app/views/private/conversations/_open.js.erb where line #3 raised:
undefined method `id' for nil:NilClass`

該應用程序在

Rails version             5.2.2;
Ruby version              2.5.3-p105 (x86_64-linux);
RubyGems version          2.7.6;
Rack version              2.0.6

消息保存后,在控制器中

/app/channels/private/conversation_channel.rb

class Private::ConversationsController < ApplicationController    
    def create
        recipient_id = Post.find(params[:post_id]).user.id
        conversation = Private::Conversation.new(sender_id: current_user.id, recipient_id: recipient_id)
        if conversation.save

            respond_to do |format|
                format.js {render partial: 'posts/show/contact_user/message_form/success'}
        end
....
end

/app/views/posts/show/contact_user/message_form/_success.js.erb

它在哪里

<%= render 'private/conversations/open' %>

它應該顯示消息

/app/views/private/conversations/_open.js.erb

哪里

var conversation = $('body').find("[data-pconversation-id='" + 
                            "<%= @conversation.id %>" + 
                            "']");

通常,它應該前進並顯示消息和彈出窗口,但我卻收到了

NoMethodError in Private::Conversations#create
Showing /var/www/appror/app/views/private/conversations/_open.js.erb where line #3 raised:
undefined method `id' for nil:NilClass`

調試后,我發現<%= @conversation%>為空...因此,該錯誤是有意義的。 但是如何從控制器傳遞@conversatio到視圖? 可以通過使用

respond_to do |format| format.js

謝謝!

編輯:

謝謝@max,的確是@conversation = ....解決了這個問題

您在控制器的對話變量中缺少@,並且變量超出范圍。 @conversation = Private::Conversation.new(sender_id: current_user.id, recipient_id: recipient_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM