2017-03-10 88 views
0

我一直試圖解決這個問題很長一段時間,我需要一雙新鮮的眼睛。在兩個控制器之間傳遞參數rails

對話有user1,user2並且可以有很多消息。 消息具有用戶和正文,屬於對話。

在我conversations controllershow方法我有辦法讓屬於一個會話的所有消息:

@conversation = Conversation.find_by(id: params[:id]) 
    if @conversation.messages.any? 
     @messages = @conversation.messages 
    end 
param_to_pass = @conversation.user2 
@message = Message.new 

,我也創建一個新的message model將它傳遞給當前表單內show.html.erb form for @message

一旦表單提交,我可以訪問提交的參數,但我也想從conversation controller傳遞到messages controller那個值param_to_pass。我怎樣才能做到這一點?

create方法我的消息控制器我使用

message = Message.new(message_params) 

是否有可能使用conversation controller中創建的@message,只是添加提交形式的額外message_params? 我可以在消息模型「param_to_pass」中添加一個字段,並將其從conversation controller(如@message.param_to_pass = param_to_pass)中添加。

還有什麼我可以發佈使問題更清楚嗎?

回答

0

您可以使用session所提供的材料之間共享數據,所以在你的會話控制器,你會做

session[:params_to_pass] = @conversation.user_2 

,並在你的消息控制器

@message.params_to_pass = session[:params_to_pass] 

但是...的數據量,你可以保存在會話中是有限的。所以更好的是通過ID的。

session[:params_to_pass] = @conversation.user_2.id 

@message.params_to_pass = User.find_by(id: session[:params_to_pass]) 
+0

謝謝。這聽起來像是一種工作方式。將會有很多消息。很多時候會有創建和更新/銷燬會話的任何缺點嗎? –

+0

這是會話存在的地方。限制主要是大小,因爲會話存儲通常是cookie存儲,所以大約是4k ...由於開銷而少一些。 – SteveTurczyn

0

你正在做什麼是很常見的,這是罕見的PARAMS傳遞一個會話左右。

如果您正在創建消息,最常見的方法是發佈到消息控制器,而不是會話控制器(這將是RESTful)。從消息控制器中,您可能會找到一種方法,將其重定向回message#create或可能的AJAX post對話,並用js響應回覆,將新消息html添加到對話消息列表的底部。

+0

是的,我意識到執行會話後使用了form_tag。 –

相關問題