Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从各种视图/控制器发布消息_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 从各种视图/控制器发布消息

Ruby on rails 从各种视图/控制器发布消息,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我仍然是Rails的新手,当我开始发明东西的时候,我知道我并没有按照Rails的方式去做 您如何解决以下问题而不重复您自己并遵循Rails惯例 我的应用程序中的用户可以互相发送消息。他们可以在查看某人正在出售的清单时,以清单显示视图:/listing/X下的形式进行查看 但他们也可以在购买清单后,以在以下网站上找到的形式互相发送消息: /行政/付款/Y 我解决了这个问题,将表单分别发布到列表控制器和支付控制器的操作消息中。要进行非CRUD操作,我在routes.rb中添加了成员: resou

我仍然是Rails的新手,当我开始发明东西的时候,我知道我并没有按照Rails的方式去做

您如何解决以下问题而不重复您自己并遵循Rails惯例

我的应用程序中的用户可以互相发送消息。他们可以在查看某人正在出售的清单时,以清单显示视图:/listing/X下的形式进行查看

但他们也可以在购买清单后,以在以下网站上找到的形式互相发送消息: /行政/付款/Y

我解决了这个问题,将表单分别发布到列表控制器和支付控制器的操作消息中。要进行非CRUD操作,我在routes.rb中添加了成员:

  resources :listings, :payments do
    member do
      post 'messaging'
    end
  end
这样,两个控制器都有我可以发布消息表单的操作,然后在消息传递方法中,我使用message.new等创建消息

工作起来很有魅力,但我认为必须有更好的方法,比如将两个表单发布到单独的MessagesCottroller::create方法

另外,也许我应该将消息逻辑提取到一个关注点中,并将其包含在ListingsController、PaymentsController或任何其他需要处理新消息的控制器中,因为它不是这样干的

还有一件事。。。所有消息都属于会话,因此我创建了ConversationsController,作为每个用户所有会话的收件箱,其中我仅使用索引和显示操作列出所有会话,并分别显示每个会话。 当用户打开/conversation/X时,他会看到所有消息和要回复的表单。正如您所看到的,用户不是在发布对话,而是在发布消息

因此,考虑到消息属于会话,消息是通过列表/x、付款/Y或会话/x中的表单发布的。我应该通过以下方式解决此问题:

添加MessagesController并将每个表单直接发布到其中,然后将bak重定向到视图s listing/x、payment/y或conversation/z? 在每个控制器中分别保存消息创建,并可能使用concern将其干燥一点?
非常感谢

您已经找到了解决方案。创建一个MessagesController,发布到该控件,创建消息,然后重定向回需要的位置。你不应该在多个地方创建消息。我之所以这样做,是因为我想到了纯RESTful,其中消息的创建必须在POST to URI/消息之后,而不是在列表/消息或付款/消息之后…:谢谢你的确认!