양식 제출에서 새 데이터베이스 항목을 만들 수 없습니다.

절대 안돼

다음과 같은 사용자 및 페어링 모델이 있습니다.

class User < ActiveRecord::Base

  enum role: [:student, :supervisor, :admin]
has_many :students, class_name: "User",
                      foreign_key: "supervisor_id"

  belongs_to :supervisor, class_name: "User"

  has_and_belongs_to_many :pairings
end

class Pairing < ActiveRecord::Base

  has_and_belongs_to_many :supervisor, class_name: 'User'
  belongs_to :student, class_name: 'User'

end

그리고 스키마의 관련 부분 (크기에 대한 devise 필드 제거) :

ActiveRecord::Schema.define(version: 20160221222318) do
create_table "pairings", force: :cascade do |t|
    t.integer  "supervisor_id"
    t.integer  "student_id"
    t.string   "project_title"
  end

  add_index "pairings", ["student_id"], name: "index_pairings_on_student_id", unique: true
  add_index "pairings", ["supervisor_id"], name: "index_pairings_on_supervisor_id"

  create_table "users", force: :cascade do |t|
    t.string   "name"
    t.integer  "role"
    t.integer  "supervisor_id"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true

end

모든 학생을 나열하는 드롭 다운 상자 1 개와 모든 감독자를 나열하는 1 개의 양식이있는보기가 있습니다. 내 목표는 두 가지입니다.

(1) 상자에서 감독자와 학생이 선택되면 해당 ID를 얻고 감독자의 ID를 학생의 supervisor_id 열에 할당합니다. (AJAX 패치 요청 사용)

(2) 드롭 다운의 ID로 페어링 테이블에 새 행을 만듭니다. (pairings_controllers create 메소드를 통해 수행)

이것이 내 견해입니다.

<script>

$("#my_special_form").submit(function(){
  var url = "/users/" + this.elements["pairing[student_id]"].value;

  $.ajax(url, {
    beforeSend: $.rails.CSRFProtection,
    data: {
      user: {
        supervisor_id: this.elements["pairing[supervisor_id]"].value
      }
    },
    type: 'PATCH',
    dataType: 'JSON',
    success: function(data, textStatus, jqXHR) {
      console.log('Success', data, textStatus, jqXHR);
    },
  });

  return false; // cancels out the normal form submission
});

</script>


<%= form_for(Pairing.new, url: pairings_path, method: :post, html: { id: 'my_special_form' }) do |f| %>
  <div class="field">
    <%= f.label :supervisor_id %>
    <%= f.collection_select(:supervisor_id, User.where(role: 1), :id, :name) %>
  </div>
  <div class="field">
    <%= f.label :student_id %>
    <%= f.collection_select(:student_id, User.where(role: 0), :id, :name) %>
  </div>
  <div class ="field">
    <%= f.label :project_title %>
    <%= f.text_field :project_title %>
  <%= f.submit %>
<% end %>

그리고 컨트롤러 :

class PairingsController < ApplicationController
    def new
        @pairing = Pairing.new
    end

  def create
    @pairing = Pairing.new(pair_params)
  end

  def update
    @pairing = Pairing.find(params[:id])
    @pairing.update_attributes(pairing_params)
  end

  private
    def pair_params
      params.require(:pairing).permit(:supervisor_id, :student_id, :project_title)
    end
end

class UsersController < ApplicationController
  before_action :authenticate_user!
  after_action :verify_authorized

  def index
    @users = User.all
    authorize User
  end

  def show
    @user = User.find(params[:id])
    authorize @user
  end

  def update
    @user = User.find(params[:id])
    authorize @user
    if @user.update_attributes(secure_params)
      redirect_to users_path, :notice => "User updated."
    else
      redirect_to users_path, :alert => "Unable to update user."
    end
  end

  private

  def secure_params
    params.require(:user).permit(:role, :supervisor_id)
  end

end

내가 가진 문제는 스크립트가 성공하지 못했지만 여전히 supervisor_id 필드를 업데이트하는 것입니다. 페어링 테이블 항목이 생성되는지 확인하기 위해 스크립트없이 테스트를 시도했지만 양식의 매개 변수가 수신되었지만 버튼을 누르면 트랜잭션에 커밋되지 않습니다. 무엇을 해야할지 모르겠다 정말 어떤 도움을 주셔서 감사합니다!

절대 안돼

다음 변경을 수행하여 해결됨

<%= form_for(Pairing.new, url: new_pairing_path, method: :post, html: { id: 'pairing_form' }) do |f| %>

Routes.rb

match '/pairings/new', to: 'pairings#create', via: [:post]
match '/users/update', to: 'users#update', via: [:patch]

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

intellij 아이디어에서 빈 데이터베이스에 새 테이블을 만들 수 없습니다.

분류에서Dev

양식 필드에서 데이터베이스 항목을 업데이트 할 수 없습니다.

분류에서Dev

Jquery, Ajax를 사용하여 페이지를 새로 고치지 않고 양식을 제출할 때 데이터베이스를 읽을 수 없습니다.

분류에서Dev

django 데이터베이스에서 양식 입력을 볼 수 없습니다.

분류에서Dev

데이터베이스에 여러 테이블을 만들 수 없습니다.

분류에서Dev

데이터베이스의 새 열이 cakephp 양식에서 데이터를 수신하지 않습니다.

분류에서Dev

django에서 데이터베이스의 현재 데이터로 채워진 양식을 어떻게 만들 수 있습니까?

분류에서Dev

웹용 Visual Studio Express에서 사용할 수없는 새로운 SQL Server 데이터베이스 옵션을 만들었습니다.

분류에서Dev

Firebase 데이터베이스의 사용자 ID 폴더에 새 경로를 만들 수 없습니다.

분류에서Dev

양식을 사용할 때 데이터베이스에 저장할 다 대다 항목을 가져올 수 없습니다.

분류에서Dev

새 데이터 유형을 Hashable로 만들 수 없습니다.

분류에서Dev

새 항목을 만들기 위해 Azure Portal에 액세스 할 수 없습니다.

분류에서Dev

데이터베이스에 텍스트를 저장하고 서버에 파일을 업로드하는 양식을 어떻게 만들 수 있습니까?

분류에서Dev

동일한 양식의 복사본에 대해 새 데이터베이스를 만들어야합니까?

분류에서Dev

C에서 libpq로 데이터베이스에 테이블을 만들 수 없습니다.

분류에서Dev

Django는 기존 외래 키 데이터베이스 항목에 해당하는 새 항목을 만듭니다.

분류에서Dev

내 데이터베이스에서 테이블을 만들 수 없습니다 구문 오류

분류에서Dev

ACCESS 양식을 통해 새 레코드를 만들 수 없습니다.

분류에서Dev

Django 1.7에서 South 데이터베이스 모델을 만들 수 없습니다.

분류에서Dev

Entity Framework Core는 Android Samsung 장치에서 데이터베이스 파일을 만들 수 없습니다.

분류에서Dev

SpringData JPA는 데이터베이스에 테이블을 만들 수 없습니다.

분류에서Dev

데이터베이스 테이블을 만들고 iOS sqlite3에 삽입 할 수 없습니다.

분류에서Dev

SQLIte 데이터베이스는 항목을 삭제할 수 없습니다

분류에서Dev

Django save () 메서드가 내 양식을 저장하지 않고 새 인스턴스를 만들 수 없습니다.

분류에서Dev

Firebase 내에서 새 웹앱을 만들 때 데이터베이스 URL이 누락되었습니다.

분류에서Dev

데이터베이스에 항목을 추가 할 수 없습니다.

분류에서Dev

어떻게 자바 String 변수에서 PARAM를 사용하여 내 SQLite는 데이터베이스에 새 테이블을 만들 수 있습니까?

분류에서Dev

NestJs / Mongoose는 Docker 작성 중에 MongoDB 데이터베이스 연결을 만들 수 없습니다.

분류에서Dev

HttpServletRequest에서 양식 데이터를 읽을 수 없습니다.

Related 관련 기사

  1. 1

    intellij 아이디어에서 빈 데이터베이스에 새 테이블을 만들 수 없습니다.

  2. 2

    양식 필드에서 데이터베이스 항목을 업데이트 할 수 없습니다.

  3. 3

    Jquery, Ajax를 사용하여 페이지를 새로 고치지 않고 양식을 제출할 때 데이터베이스를 읽을 수 없습니다.

  4. 4

    django 데이터베이스에서 양식 입력을 볼 수 없습니다.

  5. 5

    데이터베이스에 여러 테이블을 만들 수 없습니다.

  6. 6

    데이터베이스의 새 열이 cakephp 양식에서 데이터를 수신하지 않습니다.

  7. 7

    django에서 데이터베이스의 현재 데이터로 채워진 양식을 어떻게 만들 수 있습니까?

  8. 8

    웹용 Visual Studio Express에서 사용할 수없는 새로운 SQL Server 데이터베이스 옵션을 만들었습니다.

  9. 9

    Firebase 데이터베이스의 사용자 ID 폴더에 새 경로를 만들 수 없습니다.

  10. 10

    양식을 사용할 때 데이터베이스에 저장할 다 대다 항목을 가져올 수 없습니다.

  11. 11

    새 데이터 유형을 Hashable로 만들 수 없습니다.

  12. 12

    새 항목을 만들기 위해 Azure Portal에 액세스 할 수 없습니다.

  13. 13

    데이터베이스에 텍스트를 저장하고 서버에 파일을 업로드하는 양식을 어떻게 만들 수 있습니까?

  14. 14

    동일한 양식의 복사본에 대해 새 데이터베이스를 만들어야합니까?

  15. 15

    C에서 libpq로 데이터베이스에 테이블을 만들 수 없습니다.

  16. 16

    Django는 기존 외래 키 데이터베이스 항목에 해당하는 새 항목을 만듭니다.

  17. 17

    내 데이터베이스에서 테이블을 만들 수 없습니다 구문 오류

  18. 18

    ACCESS 양식을 통해 새 레코드를 만들 수 없습니다.

  19. 19

    Django 1.7에서 South 데이터베이스 모델을 만들 수 없습니다.

  20. 20

    Entity Framework Core는 Android Samsung 장치에서 데이터베이스 파일을 만들 수 없습니다.

  21. 21

    SpringData JPA는 데이터베이스에 테이블을 만들 수 없습니다.

  22. 22

    데이터베이스 테이블을 만들고 iOS sqlite3에 삽입 할 수 없습니다.

  23. 23

    SQLIte 데이터베이스는 항목을 삭제할 수 없습니다

  24. 24

    Django save () 메서드가 내 양식을 저장하지 않고 새 인스턴스를 만들 수 없습니다.

  25. 25

    Firebase 내에서 새 웹앱을 만들 때 데이터베이스 URL이 누락되었습니다.

  26. 26

    데이터베이스에 항목을 추가 할 수 없습니다.

  27. 27

    어떻게 자바 String 변수에서 PARAM를 사용하여 내 SQLite는 데이터베이스에 새 테이블을 만들 수 있습니까?

  28. 28

    NestJs / Mongoose는 Docker 작성 중에 MongoDB 데이터베이스 연결을 만들 수 없습니다.

  29. 29

    HttpServletRequest에서 양식 데이터를 읽을 수 없습니다.

뜨겁다태그

보관