我一直试图解决这个问题很长一段时间,我需要一双新鲜的眼睛。
对话有user1,user2,可以有很多消息。 消息具有用户和正文,属于对话。
在conversations controller
方法中的show
内,我可以获取属于对话的所有邮件:
@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
的{{1}}。我怎样才能做到这一点?
在param_to_pass
方法的消息控制器中我使用
create
是否可以使用message = Message.new(message_params)
内创建的@message
,只需添加表单提交的额外conversation controller
即可?
我可以在消息模型中添加一个字段' param_to_pass'并从message_params
添加conversation controller
。
我还可以发布任何其他内容以使问题更清楚吗?
答案 0 :(得分:0)
您可以使用session
在提交内容之间共享数据,因此您可以在对话控制器中执行此操作
session[:params_to_pass] = @conversation.user_2
并在您的消息控制器中
@message.params_to_pass = session[:params_to_pass]
但是......您可以在会话中保存的数据量有限。所以最好是通过ID&#39。
session[:params_to_pass] = @conversation.user_2.id
和
@message.params_to_pass = User.find_by(id: session[:params_to_pass])
答案 1 :(得分:0)
你正在做的事情非常普遍,在会话中传递参数很少见。
如果您要创建消息,最常见的方法是发布到消息控制器,而不是会话控制器(这将是RESTful)。从消息控制器,您可能找到一种方法,可以从message#create
重定向回到对话,或者可能是AJAX发布到消息,并使用js响应进行响应,将新消息html添加到对话消息的底部列表。