Rails 4 |正确创建和保存控制器

时间:2014-11-09 20:46:32

标签: ruby-on-rails

我正在创建各种消息系统。它是Rails 4中更大的整体系统的一部分。 无论如何,为了简单地设置我的问题,我有可以发送和接收消息的用户。所以在我的“新”用户视图中,我在创建新消息时向消息控制器发送参数[:receiver_id]。

我的问题是如何正确地将@send_to变量放到create动作中。我必须通过用户视图中的receiver_id将其发送到消息@ new action。我是以某种方式将其存储为消息参数还是将其设为隐藏参数?

这是我的消息控制器

class MessagesController < ApplicationController
  def new
    @message = Message.new
    #this :receiver_id is being sent from the show view in the user controller / view
    #it is being used to pass a parameter
    @send_to = User.find(params[:receiver_id])
    @message.sender = current_user
    @message.receiver = @send_to

    #the form_for should save the message with the RESTful action of create method in this controller
  end

  def create
    debugger
    @messasge = Message.create!(message_params)
    redirect_to users_path
  end

  def index
    @messages = current_user.messages
  end

  def sent
    @messages = current_user.messages
  end

  def message_params
    params.require(:message).permit!
  end
end

我从rails路由中了解到主要是关于RESTful操作,是的,我在写这篇文章之前再次阅读了路由指南。

编辑:

我已将这两行移到create函数中。 @send_to需要:receiver_id。

@message.sender = current_user
@message.receiver = @send_to

1 个答案:

答案 0 :(得分:1)

  1. 您应该实现发送消息的异步请求,因为系统用户只是为了发送消息而重定向到另一个页面可能会很烦人。从上面的片段中可以看出(逻辑)。
  2. 有一个异步请求,它将提供一个包含新消息表单的对话框,下一步就是将表单数据发送到messages#create动作。我假设用户在完成表单数据时可以选择某种方式的邮件收件人。
  3. 操作new不需要知道谁是消息接收者。
  4. 不要使用Message.create!(使用!),因为如果创建失败,它将引发异常。如果失败,请使用save并处理案例
  5. e.g:

    def create
      @message = Message.new params[:message]
      @message.save
    
      respond_to do |f|
        f.json do
          render :json => {:success => @message.persisted?, :message => @message}.to_json
        end
      end
    end