我是编码和stackoverflow的新手,所以我希望我要问的问题不会太愚蠢 我正在尝试做的是在标题中:用户登录(电子邮件,密码)后,他们将被重定向到新表单,可以在其中填写姓名,个人简历和图片。 一切按计划进行,直到他们点击提交并遇到两个问题:
1 /不考虑新数据 2 /重定向错误
注册后,用户将被重定向到“ profiles /:id / edit”。提交表单后,它将重定向到“ user /:id”,该名称不存在。
它不应该重定向到控制器中的profile#update吗?
这是我的不同代码:
1 /路线
Rails.application.routes.draw do
devise_for :users
root to: "pages#home"
# For details on the DSL available within this file,see http://guides.rubyonrails.org/routing.html
resources :jam_sessions,only: [:show,:index,:new,:create] do
resources :spots,:create,:new]
resources :messages,only: [:create]
end
resources :participations,only: [:create,:update]
resources :profiles,:edit,:update]
resources :dashboards,only: [:index,:show]
resources :reviews,only: [:create]
mount actionCable.server => "/cable"
get 'users/:id',:to => 'profiles#edit',:as => :user
patch 'profiles#edit',:to => 'profiles#update'
end
2 / profiles_controller
class ProfilesController < ApplicationController
def show
@user = User.find(params[:id])
@reviews = Review.where(receiver_id: @user.id)
@instruments = UserInstrument.where(user_id: @user.id)
@participations = Participation.where(user_id: @user.id)
date = Time.now
if @participations != nil
@jam_sessions = []
@participations. each do |participation|
spot = Spot.find_by(id: participation.spot_id)
@jam_sessions << JamSession.find_by(id: spot.jam_session_id)
end
@future_jam_sessions = []
@past_jam_sessions = []
@jam_sessions.each do |jam_session|
if jam_session.starts_at > date
@future_jam_sessions << jam_session
else
@past_jam_sessions << jam_session
end
end
else
puts "no jam"
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
@user.update(user_params)
raise
if @user.save
redirect_to profiles_path(@user)
else
render "new"
end
end
private
def user_params
params.require(:user).permit(:first_name,:last_name,:bio)
end
end
3 / application_controller
class ApplicationController < actionController::Base
before_action :authenticate_user!,except: [:home,:show]
before_action :configure_permitted_parameters,if: :devise_controller?
def configure_permitted_parameters
# For additional fields in app/views/devise/registrations/new.html.erb
devise_parameter_sanitizer.permit(:sign_up,keys: [:first_name,:bio])
# For additional in app/views/devise/registrations/edit.html.erb
devise_parameter_sanitizer.permit(:account_update,keys: [:username])
end
def default_url_options
{ host: ENV["DOMAIN"] || "localhost:3000" }
end
end
4 /用户模型
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable,:lockable,:timeoutable,:trackable and :omniauthable
devise :database_authenticatable,:registerable,:recoverable,:rememberable,:validatable
has_many :user_instruments,dependent: :destroy
has_many :instruments,through: :user_instruments
has_many :messages,dependent: :destroy
has_one_attached :photo,dependent: :destroy
has_many :reviews_written,class_name: "Review",foreign_key: :writer_id
has_many :reviews_received,foreign_key: :receiver_id
has_many :jam_sessions,dependent: :destroy
def profile_picture
if photo.attached?
photo.key
else
"avatar-unknown.png"
end
end
def full_name
"#{first_name} #{last_name}"
end
end
5 /编辑视图
<%= simple_form_for(@user) do |f| %>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.input :bio %>
<%= f.input :photo,as: :file %>
<%= f.submit 'Update profile' %>
<% end %>
谢谢! 奥利维尔