Rails+Vue를 켜서 자체 검사할 때 매개 변수가 예상대로 전달되지 않습니다.

8429 단어 Vue.jsRails

한 일


rails와 vue를 사용하여 사용자 등록 기능을 실현하고devise 등gem를 사용하지 않습니다

빠지다


사용자 등록 양식에 입력하고 켜서 검사할 때:user에 password와 password_confirmation의 값이 없으면 상당히 고전한다.
구체적으로 이런 느낌입니다.

이상형


콘솔
Parameters: {"user"=>{"name"=>"hogehoge", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}

NG형

Parameters: {"name"=>"", "email"=>"", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "user"=>{"name"=>"", "email"=>""}}
password 및 password_confirmation만 user에 들어가지 않습니다!!
NG형 상황에서도 컨트롤러의 주파수 플래시 파라미터를 사용할 수 있다
users_controller.rb
private
  def user_params
    params.permit(:name, :email, :password, :password_confirmation)
  end
만약 그렇다면 괜찮지만, 어쨌든 멋지게 이렇게 쓰고 싶다!
users_controller.rb
private
  def user_params
    params.fetch(:user, {}).permit(:name, :email, :password, :password_confirmation)
  end
vue로 쓰면has_secure_password는 작용하지 않습니까?아니면,form의 작법이 좋지 않습니까?한 마디로 하면 여러 가지 원인을 고려하여 시간을 낭비하고 시간을 낭비했다.

Vue 쓰기


NG 쓰는 법부터 시작해.(js 부분만 있습니다. 상당히 생략되었습니다)

NG 쓰기


NewForm.vue
import axios from 'axios';
export default {
  data: () => ({
    user: {
      name: '',
      email: '',
      password: '',
      password_confirmation: '',
    },
  }),
  methods: {
    createUser: function() {
      axios
        .post('/api/v1/users', this.user)
        .then(response => {
          var res = response.data;
          this.$router.push({ name: 'home' })
        })
        .catch(error => {
          if(error.response.data && error.response.data.errors) {
            this.errors = error.response.data.errors;
          }
        })
    },
이러면 NG야.

이상적인 매개 변수의 쓰기 되돌리기


NewForm.vue
import axios from 'axios';
export default {
  data: () => ({
    name: '',
    email: '',
    password: '',
    password_confirmation: '',
  }),
  methods: {
    createUser: function() {
      axios
        .post('/api/v1/users', { user: { name: this.name, email: this.email, password: this.password, password_confirmation: this.password_confirmation }})
        // 以下、同じなので省略
기계를 켜서 스스로 검사할 때, 이렇게 명확하게 쓰면 OK!
도저히 받아들일 수 없는 것은 NG 때name와 이메일도 잘 끼워져 있다는 것이다.
password 및 password_confirmation은 표의 열에 존재하지 않기 때문에 가져올 수 없습니다.has_secure_패스워드를 써도 안 되나요
초보적인 설치에 많은 시간이 걸렸다고 한다.
그럼 안녕!

좋은 웹페이지 즐겨찾기