简体   繁体   中英

Add 'current_user' to a model. (Devise) Rails

Hi I'm new here and also new in rails.

I want to add a couple values by default to a database called books (Model: Book.erb) there is a user who creates these books(current_user), and I thought that a way to identify who creates and deletes this content is by adding some default values from the user and clasificate them (to be specific username and password)

my table ":books" has available two fields for adding username and password

I tried to do this:

# Book.erb
class Book < ActiveRecord::Base
    after_save :set_default_values
    def set_default_values
        self.username = current_user.username
        self.password = current_user.encrypted_password
    end
end

but it seems to be that I can't call 'current_user' from this model.

I was reading a pratice on this blog

but some were saying that this method violates the MVC pattern, do you agree with them? do you guys know a better way to do this process without violating the pattern?

Well, I'm not sure I can conceive of why you'd want to store a user name and user password in a book table as even if it was easily explained, it would be in violation of normalization practices for good database design which pretty much states you should only express a field once and then share it where it needs to be shared.

Now, assuming you must do this for some reason I can't conceive, I'd have to ask if "username" is your actual field or is it just "name" which is more standard Rails. And, I believe you'll have to have a relationship between these models to pull the data from one into the other and I don't see that book has_many users or one or belongs_to or anything of that sort.

With a relationship between book and user you have access to all user properties without writing them anywhere other than the user table. So I think you probably want to look at that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM