Я новичок в Rails и пытаюсь сделать следующее, но чувствую, что делаю это небезопасно:
Посетитель моего сайта может видеть страницы профилей пользователей и связываться с ними без регистрации. Между пользователями и посетителями существует связь has_and_belongs_to_many. Когда посетитель связывается с пользователем, я хочу создать новую запись в моей таблице посетителей с информацией, которую они отправляют, и создать новую связь в таблице users_visitors, чтобы позже я мог показать пользователю отправленную информацию. Что у меня есть на данный момент:
< STRONG> модели :
class User < ActiveRecord::Base
has_and_belongs_to_many :visitors
class Visitor < ActiveRecord::Base
has_and_belongs_to_many :users
views: user / profile.html.erb
#this is at example.com/user/id
<%= form_for Visitor.new, :url => contact_path, :html => { :method => :post } do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= submit_tag("Submit") %>
<% end %>
routes.rb
#this will just point to a confirmation page
post '/contact', to: 'visitors#contact', :as => :contact
Я теряюсь в двух частях: как передать / использовать идентификатор пользователя, необходимый для создания отношения, и как должен выглядеть контроллер (или модель) для создания этих новых отношений?
1 ответ
Во-первых, я считаю, что это не лучший маршрут.
post '/contact', to: 'visitors#contact', :as => :contact
На мой взгляд, это действие contact
следует разместить на вашем контроллере Users
, а не на вашем контроллере Visitors
; в конце концов, вы обращаетесь к User
, верно?
Вместо этого вам будет полезен такой маршрут, как (я не использую ресурсоемкие маршруты, потому что понятия не имею, как выглядит остальная часть вашего config/routes.rb
)
post '/users/:id/contact', to: 'users#contact', :as => :contact
Тогда ваш метод contact
в вашем UsersController
может выглядеть так
def contact
@user = User.find(params[:id]) # this is how you get the user the visitor is contacting
@visitor = Visitor.create(params[:visitor])
@visitor.users << @user # this associates the User with the Visitor
end
Вышеупомянутое должно работать, но это упрощенный пример (я не занимаюсь проверкой; я не перенаправляю посетителя куда-то после; я на самом деле не связываюсь с пользователем) - Вам нужно будет конкретизировать это действие, чтобы оно соответствовало вашим потребностям.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.