Rails Many-to-Many с сильными параметрами - PullRequest
0 голосов
/ 08 мая 2018

У меня есть модель под названием service_request, которая belongs_to :unit и belongs_to :user

Пользовательская и единичная модели настроены на has_many :service_requests

Существует еще одна модель под названием Арендатор, где пользователь должен существовать, чтобы иметь возможность создавать запрос на обслуживание. Поэтому я просматриваю электронную почту current_users, чтобы узнать, есть ли они в таблице Tenant.

Таким образом, таблица service_requests является таблицей соединений, которая имеет внешний ключ для пользователя и второй внешний ключ для устройства, а также дополнительные столбцы, относящиеся только к самому запросу на обслуживание.

Проблема в том, что мне нужно сохранить 3 вещи, которые пользователь, модуль и все, что передается, также для столбцов запросов на обслуживание. В настоящее время я могу сохранить запрос на обслуживание, в котором есть пользователь и единица, но я не уверен, как передать строгие параметры для запроса на обслуживание service_request_params

в контроллере service_requests у меня есть действие создания

  def create
      # check to see that the user exists in the tenant table first
    if Tenant.exists?(email: current_user.email) 

      @tenant ||= Tenant.find_by(email: current_user.email) if current_user 
        @tenant.unit  # find the tenants unit object

      # create service_request and pass the user and tenant unit info
      @service_request = ServiceRequest.new(unit: @tenant.unit, user: current_user)

      respond_to do |format|
        if @service_request.save
          format.html { redirect_to @service_request, notice: 'Service request successfully created.' }
          format.json { render :show, status: :created, location: @service_request }
        else
          format.html { render :new }
          format.json { render json: @service_request.errors, status: :unprocessable_entity }
        end
      end

      else
         # [ TODO: handle when the user is not in tenant table]

        end  
      end 




  private

    # Never trust parameters from the scary internet, only allow the white list through.
    def service_request_params
      params.require(:service_request).permit(:title)
    end  

1 Ответ

0 голосов
/ 08 мая 2018

ОК, я все заработал, не уверен, что это предпочтительный "Rails way", если нет, пожалуйста, дайте мне знать.

В действии создания я просто назвал сильные параметры, а затем использовал .merge, чтобы добавить дополнительную единицу и пользовательские данные.

  @service_request = ServiceRequest.new(service_request_params.merge(unit: @tenant.unit, user: current_user))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...