Ссылка на текущего пользователя в Ruby on Rails - PullRequest
5 голосов
/ 29 марта 2012

Итак, я использовал логику в "аутентификации с нуля" railscast на http://railscasts.com/episodes/250-authentication-from-scratch, и она, кажется, работает, и я могу вставить сообщение "Вы вошли как ..." вверху страницы.

Но если я хочу сделать что-то вроде журнала, который отправил сообщение, я ударил немного стены.

Я не хочу отправлять его через скрытое поле в новой форме сообщения, потому что, полагаю, с этим связаны проблемы безопасности.

Я не хочу использовать логику «принадлежит» в руководстве по rails на http://ruby.railstutorial.org/ruby-on-rails-tutorial-book, потому что, хотя это технически будет работать здесь, в будущем мне может понадобиться войти в систему, кто создал запись, где " принадлежит "отношения не существует.

То, что я пытался сделать, это создать вызов функции «перед сохранением» в моей модели поста, который назначает значение «create_by», но я полагаю, что модели не могут получить доступ к current_user, который был создан согласно аутентификации railscast.

Так что теперь я понятия не имею, как сделать что-то подобное.

РЕДАКТИРОВАТЬ: плохо знакомы с Ruby, плохо знакомы с ERD, но все, что я имею в виду под отношением к отношениям, не существует, если бы существовала, скажем, система оценки сообщений, каждый рейтинг принадлежал бы сообщению. Но я также хотел бы войти, кто представил каждый рейтинг.

Ответы [ 3 ]

7 голосов
/ 29 марта 2012

Если я хорошо понимаю, что ваша проблема в том, что вы не можете видеть, какой пользователь в настоящий момент регистрируется с помощью вспомогательного метода current_user в вашей модели, вы можете просто установить атрибут created_by сообщения в Post контроллер, прежде чем сохранить его, что-то вроде:

def create
  @post = Post.new(params[:post])
  @post.created_by = current_user.id
  if @post.save
    redirect_to whereyouwant_url, :notice => "Post successfully created"
  else
    render "new"
  end
end
0 голосов
/ 24 января 2015

(альтернатива ответу Альдо 'xoen' Giambelluca)

Я думаю, вам следует использовать отношение belongs_to, как объяснено в рассылке, но если вы действительно не хотите, добавьтеследующий метод в вашем User классе:

def new_post(params)
  post = Post.new(params)
  post.created_by = id 
  post
end

и в вашем контроллере:

def create
  @post = current_user.new_post(params[:post])
  if @post.save
    redirect_to @post, notice: 'Post successfully created'
  else
    render 'new'
  end
end
0 голосов
/ 29 марта 2012

Хорошо, не уверен, какие сложности существуют, но здесь идет речь:

, поэтому addind belongs_to заставляет сообщение иметь поле с именем user_id, которое является внешним ключом для идентификатора пользователя.если вы добавили созданный, это будет делать то же самое, за исключением того, что вам придется программировать обновление и разыменовывать себя.Я думаю, что это, вероятно, лучший способ получить эту функциональность, и вам просто нужно добавить ее позже к частям, которые ее не имеют, но с помощью rails это легко сделать.

class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :user, :as => :created_by
end



post.created_by
user.posts

даст вам доступ к этому пользователю, и это эквивалентно использованию того, о чем вы говорили, за исключением того, что rails сделает свое волшебство и добавит методы для вас.

EDIT: еслиэто не работает для вас, извините, ваш вопрос не был ясен о том, зачем вам нужны определенные вещи, но вы всегда можете добавить, что отношения довольно просто, вот что я бы порекомендовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...