Я пытаюсь (и не очень далеко) понять, как использовать папки с именами в моем приложении Rails 5.Rails 5 - папки с именами
У меня есть таблицы в моей схеме для пользователей, тождеств и настроек.
Ассоциации являются:
Пользователь
has_many :identities, dependent: :destroy
has_one :setting, dependent: :destroy
Установка
belongs_to :user
Удостоверение
belongs_to :user
Я организовал мои папки контроллера, так что у меня есть приложение/контроллер s/пользователи/identities_controller.rb и приложение/контроллеры/пользователи/settings_controller.rb
Каждые из этих контроллеров имеют первую строку:
class Users::SettingsController < ApplicationController
class Users::IdentitiesController < ApplicationController
Я организовал мои взгляды папку подобным образом.
У меня есть приложение/views/users/settings/show.
У меня нет представлений для тождеств, кроме частичного имени _authentications.html.erb. В настоящее время он хранится в папке app/views/users. Я пытаюсь переместить его в папку app/views/users/settings и отобразить его на странице приложения/просмотров/пользователей/настроек/показа.
В моих маршрутах файл у меня есть:
resources :users, shallow: true do
scope module: :users do
resources :assign_roles
resources :identities
resources :profiles
resources :settings
end
Когда я оказывать частичные аутентификации из приложения/просмотров/пользователей показать страницу, у меня нет никаких ошибок. Все работает. Я застрял, потому что есть что-то, что я не понимаю & Я не знаю, что это такое.
Я пытаюсь перенести аутентификации, частично связанные с приложением/представлениями/пользователями/настройками, чтобы я мог визуализировать его из приложения/представлений/пользователей/настроек/шоу.
Когда я пытаюсь сделать это, я получаю сообщение об ошибке, которое говорит:
undefined method `identities' for nil:NilClass
что ссылки ошибок этот блок из моих авторизаций парциальное:
<% if @user.identities.map(&:provider).include?('linkedin') %>
<span class="glyphicon glyphicon-ok"></span>
<% else %>
<%= link_to 'Connect your Linkedin account', user_linkedin_omniauth_authorize_path %>
<% end %>
Я не понимаю ли я» m должен попытаться добавить настройки в этом случае, если так или иначе? Я попытался, если @ setting.user.identities (только как догадка), но это не сработало.
Может ли кто-нибудь увидеть, что я делаю неправильно? Я не могу найти простое английское объяснение того, как начать работу с вложением и пространством имен.
Добавить настройки контроллера
class Users::SettingsController < ApplicationController
before_action :set_setting, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
after_action :verify_authorized
def index
@settings = Setting.all
authorize @settings
end
def show
# authorize @setting
end
def new
@setting = Setting.new
authorize @setting
end
def edit
end
def create
@setting = Setting.new(setting_params)
authorize @setting
respond_to do |format|
if @setting.save
format.html { redirect_to @setting }
format.json { render :show, status: :created, location: @setting }
else
format.html { render :new }
format.json { render json: @setting.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @setting.update(setting_params)
format.html { redirect_to @setting }
format.json { render :show, status: :ok, location: @setting }
else
format.html { render :edit }
format.json { render json: @setting.errors, status: :unprocessable_entity }
end
end
end
def destroy
@setting.destroy
respond_to do |format|
format.html { redirect_to settings_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_setting
@setting = Setting.find(params[:id])
authorize @setting
end
# Never trust parameters from the scary internet, only allow the white list through.
def setting_params
params.require(:setting).permit(:newsletter)
end
end
Сообщение об ошибке, похоже, указывает, что @user равно нулю в вашем частичном. Можете ли вы поделиться соответствующим кодом действия контроллера? – omnikron
@omnikron - какой частичный вы имеете в виду? Если я выношу _authentications.html.erb, когда он сохраняется как файл под представлениями/пользователями и рендерит в users/show - все работает. Вещь, которую я пытаюсь изменить, заключается в том, что я перемещаю частичную аутентификацию, чтобы сохранить ее в папке views/users/settings и отобразить ее в представлении/users/settings/show.html.erb. Какой контроллер имеет отношение к этому сценарию? – Mel
Этот контроллер, действие которого оказывает частичное. Мое предположение - контроллер настроек. – Sajan