[rails] 사용자가 등록할 때name 표시줄에 @를 자동으로 추가하는 방법

7744 단어 RubyRails

개시하다


첫 번째 학자가 투자조합 제작에 열중하는 걸 기록해 놓을게요.
Tiwtter의 계정 ID처럼 특정 열의 첫머리에 @를 붙이는 방법.많은 사람들이 hoto Forio를 만들 때 먼저 사용자의 이름과 계정에 @을 붙인다고 생각합니다.
너무 초보적인 내용이라 찾아봤자 바로 그런 기사를 찾지 못해 남았다.

결론


4before_save 모델로 설정합니다.
상기 방법으로 로그인, 로그아웃할 때도 before저장이 실행되었기 때문에 로그인할 때마다 @이 증가하기 때문에 다른 방법으로 실행되었습니다.(특정 컨트롤러만 before save를 실행하는 방법을 몰라요.)

코드 및 설명


이번 User 모델 어카운트.name 열에 @
controllers/users_controller.rb
def create
  @user = User.new(user_params)
  @user.account_name = "@" + @user.account_name  #ここで@を付ける
  if @user.save                                       
    @user.send_activation_email                     
    flash[:info] = "メールを確認してアカウントを有効化して下さい"
    redirect_to root_url
  else
    render "new"
  end
end

def update
  @user = User.find(params[:id])
  if @user.update_attributes(user_params)
   @user.account_name = "@" + @user.account_name
     @user.save
    flash[:success] = "プロフィールを編集しました"
    redirect_to @user
  else
    render 'edit'
  end

end

 def edit
    @user = User.find(params[:id])
    @account_name = @user.account_name
    @account_name.slice!(0) 
    @account_name
  end
views/users/edit.html.slim
= form_with model:@user, local:true do |f| 
 = f.label :account_name, 'アカウントID'
        .input-group
          .input-group-prepend
            .input-group-text @
          = f.text_field :account_name, class: 'form-control' , placeholder: "9文字まで", value: @account_name
form에서 보내온 값을 저장하기 전에 가공합니다.
또한 프로필 편집 페이지에서 폼에 초기 값을 설정할 때 @ 이외의 값을 입력해야 합니다.
따라서 컨트롤러의 편집 동작에서 슬라이스 방법으로 @을 삭제했습니다.
변수를 form의value 속성의 초기 값으로 설정합니다.
콜백 처리 정보
http://www.techscore.com/blog/2012/12/25/rails%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E3%81%BE%E3%81%A8%E3%82%81/
슬라이스 방법
http://doc.code161.com/ruby/string-delete-method/
참고로, 이것은 new 템플릿의 코드입니다.
views/users/new.html.slim
#slim,bootstrap使用
= form_with model: @user, local: true do |f|
(中略)
  = f.label :account_name, 'アカウントID'
    .input-group
      .input-group-prepend
        .input-group-text @
          = f.text_field :account_name, class: 'form-control' , placeholder: "9文字まで" 

끝맺다


누구한테 도움이 됐으면 좋겠어요.
더 똑똑한 방법이 있으면 알려주세요.
또 잘못된 점이 있으면 메시지를 남겨주세요.
참고 자료
https://qiita.com/KeisukeYoshida0220/items/e1ce152ac8d89845aab3

좋은 웹페이지 즐겨찾기