在2个控制器导轨之间传递参数

时间:2017-03-10 22:12:58

标签: ruby-on-rails ruby-on-rails-4

我一直试图解决这个问题很长一段时间,我需要一双新鲜的眼睛。

对话有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

我还可以发布任何其他内容以使问题更清楚吗?

2 个答案:

答案 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添加到对话消息的底部列表。