2015-03-31 2 views
1

Я добавляю в пользовательские настройки в моем приложении Ruby on Rails, и то, что я пытаюсь сделать сейчас, это сделать так, чтобы пользователь мог редактировать только их предпочтения, поэтому не создавайте новый или не просматривайте список всех предпочтений. Это требует нового предпочтения, когда новый пользователь создается с идентификатором из таблицы пользователей, отображаемым в столбце user_id в таблице настроек.Ruby on Rails Пользователь может редактировать только предпочтение, не видеть список или создавать новые

Это схема:

create_table "perferences", force: :cascade do |t| 
    t.integer "user_id" 
    t.integer "category_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.text  "colour" 
end 

create_table "users", force: :cascade do |t| 
    t.string "password_digest" 
    t.string "role" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "first_name" 
    t.string "last_name" 
    t.string "house_no" 
    t.string "street" 
    t.string "town" 
    t.string "postcode" 
    t.string "email" 
    t.date  "date_of_birth" 
end 

Users_controller:

def create 
    @user = User.new(user_params) 
    if @user.save 
    # login is achieved by saving a user's 'id' in a session variable, 
    # accessible to all pages 
    session[:user_id] = @user.id 
    UserMailer.welcome_email(@user).deliver_now 
    redirect_to films_path 
    else 
    render action: "new" 
    end 
end 

И мой routes.rb:

resources :perferences 
resources :prices 
# get 'perferences/index', post: 'perferences#new' 
# post 'perferences/index', to: 'perferences#new' 
# match 'perferences' => 'perferences#create', :via => [:post] 

post 'reviews/new/:id', to: 'reviews#new' 
get 'reviews/new/:id', to: 'reviews#new' 
#resources :showings 

get 'sessions/new' 
get 'sessions/create' 
get 'sessions/destroy' 
controller :sessions do 
    get 'login' => :new 
    post 'login' => :create 
    get 'logout' => :destroy 
end 

#post 'films/search', to: 'films#search' 
get 'films/index' 
get 'categories/index' 
get 'certificates/index' 

root 'films#index' 

post 'films/search', to: 'films#search' 
post 'films/search_1', to: 'films#search_1' 
post 'films/search_2', to: 'films#search_2' 
post 'films/search_3', to: 'films#search_3' 
post 'films/search_4', to: 'films#search_4' 
post 'films/search_5', to: 'films#search_5' 
post 'films/search_6', to: 'films#search_6' 

post 'films/display_products_by_genre', :to => 'films#display_products_by_genre' 
get 'films/display_products_by_genre', :to => 'films#display_products_by_genre' 

post 'seats/display_seats_by_screen', :to => 'seats#display_seats_by_screen' 
get 'seats/display_seats_by_screen', :to => 'seats#display_seats_by_screen' 

post 'screens/display_screens_by_showing', :to => 'screens#display_screens_by_showing' 
get 'screens/display_screens_by_showing', :to => 'screens#display_screens_by_showing' 

post 'films/multi_find', :to => 'films#multi_find' 
get 'films/multi_find', :to => 'films#multi_find' 

post 'seats/multi_find', :to => 'seats#multi_find' 
get 'seats/multi_find', :to => 'seats#multi_find' 
post 'screens/multi_find', :to => 'screens#multi_find' 
get 'screens/multi_find', :to => 'screens#multi_find' 

resources :users 
resources :films 
resources :categories 
resources :certificates 
resources :showings 
resources :bookings 
resources :seats 
resources :screens 
resources :reviews 
resources :films do 
    resources :showings 
end 
resources :showings do 
    resources :seats 
end 


match '*a', to: 'errors#routing', via: [:get, :post] 

Обратите внимание на закомментированы линии в маршрутах, что у меня есть попытался получить его так, чтобы вместо перехода на страницу указаний/индексов пользователь был отправлен на страницу perferences/edit где они редактируют свои собственные данные.

Чтобы выяснить, что мне нужно сделать:

  • Сделать так, чтобы пользователь не может перейти к perferences/индекс или perferences/новую страницу, но отправляются на страницу perferences/редактирования, где они редактировать свои существующие предпочтения
  • Создать новое предпочтение, когда новый пользователь создаются так, что они отдают предпочтение редактировать, даже если он не имеет ничего, но их до сих пор user_id

Может кто-то пожалуйста, помогите. Контроллер

ответ

0

Пользователи:

def create 
    @user = User.new(user_params) 
    if @user.save 
    # login is achieved by saving a user's 'id' in a session variable, 
    # accessible to all pages 
    session[:user_id] = @user.id 
    UserMailer.welcome_email(@user).deliver_now 
    @user.add_default_preferences # adds default preferences 
    redirect_to films_path 
    else 
    render action: "new" 
    end 
end 

Пользователи Модель:

class User < ActiveRecord::Base 

    def add_default_preferences 
     Preference.create user_id: self.id # creates 1 preference for user 
    end 

end 

Маршруты:

# resources :perferences 
# just add route for edit 
get 'preferences/:id' => 'preferences#edit', as: :edit_preference # route for editing 
patch 'preferences/:id' => 'preferences#update' # route for updating 
# just implement your preferences controller 
resources :prices 
# get 'perferences/index', post: 'perferences#new' 
# post 'perferences/index', to: 'perferences#new' 
# match 'perferences' => 'perferences#create', :via => [:post] 

post 'reviews/new/:id', to: 'reviews#new' 
get 'reviews/new/:id', to: 'reviews#new' 
#resources :showings 

Затем на ваш взгляд, добавить

<% if @preference %> 
    <%= link_to "My Preferences" , edit_preference_path(@preference) %> 
    <% end %> 

В вашем Preference контрольном фильтре, который может использовать только владелец предпочтения для редактирования предпочтений.

+0

Я только что попробовал это, у вас есть работа, так что новое добавление добавляется, когда пользователь создается (спасибо), но маршрутизация не работает, но все же позволяет перейти к указателям/индексу page –

+0

Вы прокомментировали 'resource: preferences', как я показал вам в разделе« Маршруты »? – Nermin

+0

Спасибо! Не видел этого! Итак, теперь пользователь не может перейти на индексную страницу или добавить новое предпочтение, но как я могу сделать это, чтобы ссылка на домашней странице сайта (которая представляет собой views/layouts/application.html.erb) относится к предпочтению редактировать страницу с идентификатором пользователя?Это строка кода, которую я пробовал: '<% = link_to" Мои настройки ", edit_perference_path (@perference)%>', но я получаю ошибку: 'undefined method 'edit_perference_path'' –

Смежные вопросы