How do you pass data from a controller to a model with Ruby on Rails?

前端 未结 2 1139
南笙
南笙 2020-12-09 06:26

How do you pass data from a controller to a model?

In my application_controller I grab the user\'s location (state and city) and include a before_

2条回答
  •  醉酒成梦
    2020-12-09 06:49

    The concept you're wrestling with is MVC architecture, which is about separating responsibilities. The models should handle interaction with the DB (or other backend) without needing any knowledge of the context they're being used in (whether it be a an HTTP request or otherwise), views should not need to know about the backend, and controllers handle interactions between the two.

    So in the case of your Rails app, the views and controllers have access to the request object, while your models do not. If you want to pass information from the current request to your model, it's up to your controller to do so. I would define your add_community as follows:

    class User < ActiveRecord::Base
    
      def add_community(city, state)
        self.community = city.to_s + state.to_s  # to_s just in case you got nils
      end
    
    end
    

    And then in your controller:

    class UsersController < ApplicationController
    
      def create  # I'm assuming it's create you're dealing with
        ...
        @user.add_community(request.location.city, request.location.state)
        ...
      end
    end
    

    I prefer not to pass the request object directly, because that really maintains the separation of the model from the current request. The User model doesn't need to know about request objects or how they work. All it knows is it's getting a city and a state.

    Hope that helps.

提交回复
热议问题