1

그래서 SQLServer DB에 대해 레일즈 2.3.3 위에서 Extjs를 실행하고 있습니다. DB에서 데이터를 가져 와서 표시 할 수 있지만 만들거나 업데이트하거나 파기 할 수 없습니다.Rails, Extjs 및 SQL Server

이상하게도 콘솔이나 다른 업데이트 시도 또는 시도 오류가 발생하지 않습니다. 단순히 실패합니다.

생성시 InvalidStatement 오류가 발생합니다. 새 행에 적절한 ID가 할당되지 않았을 가능성과 관련이 있습니다. 그들은 null ID를 할당 받고 있고 물론 ID 값으로 허용되지 않습니다.

아무도 비슷한 문제가 발생 했습니까? Extjs + SqlServer를 사용하여 작성, 업데이트 또는 삭제하는 문제에 대한 해결 방법에 대한 아이디어가 있습니까?

감사합니다.

UPDATE :

자동 증가가 문제의 테이블의 ID 필드에 설정됩니다. 난 특정 오류 다시 넘겨지고 : 나는 디버거를 열고 수동으로 ID를 추가 팝업 경우, 그것은 잘 작동하는지

ActiveRecord::StatementInvalid (DVI::DatabaseError: 37000 (339) [ODBC SQL Server Driver][SQL Server] DEFAULT or NULL are not allowed as explicit identity values. INSERT INTO [table] ([username], [fullname], [ID], [password], [superuser]) VALUES('testing', 'testing', NULL, 'testing', 1)): 
# ... ruby exceptions mostly springing from the sqlserver adapter ... 

주 ...

UPDATE2 : 업데이트에 대한

/destroy를 사용하면 초기 POST 요청이 적절한 (수정 된) 필드 데이터로 구성되고 성공적인 응답이 표시됩니다. 그러나 업데이트 데이터는 후속 GET 요청에 반영되지 않습니다. 로그에 파고

, 우리는 갱신에 생성 된 SQL은 다음과 같은 문제가 발견 :

Administrators Load (0.0ms) SELECT * FROM [Administrators] WHERE ([Administrators].[id] = '2') 
EXECUTE (0.0ms) BEGIN TRANSACTION 
Administrators Update (0.0ms) UPDATE [Administrators] SET [superuser] = 1 WHERE [id] = NULL 

유사한 문제는이 요청을 파괴 괴롭 히고있다.

여기 무슨 일 이니? 어떻게/왜 id가 적절한 레코드를 가져오고 작업을 수행하는 사이에 null로 설정되는 것입니까? 내가 수동으로 디버거에서이 작업을 수행 할 때이 동작 즉, 심지어는 것을

주,

(rdb:63) Administratiors.find(2).destroy 

는 ID에 따라 적절한 행을 선택,하지만 ID가 테이블에서 행을 삭제하려고 시도 NULL입니다. 물론 어느 ...

갱신 3 실패

확인을, 그래서 작업을 삭제 작업을 얻기 위해 찾은 유일한 방법은 내 자신의 SQL을 출시하는 것입니다. @ admin.destroy를

으로 바꾸기
sql = ActiveRecord::Base.connection() 
sql.begin_db_transaction 
sql.execute("SELECT * FROM Administrators WHERE ([Administrators].[id] = #{params[:id]})"); 
sql.delete("DELETE FROM Administrators WHERE ([Administrators].[id] = #{params[:id]})"); 
sql.commit_db_transaction 

으로 작업을 수행하십시오.

UPDATE4 :

이것은 또한 작동합니다

Administrators.delete(params[:id]) 

UPDATE5 :

좋아, 그래서 지금 CRUD는 ExtJS로 및 SQL 서버 사이에서 작동합니다.그러나 그것은 추한 해킹 (특히 ​​업데이트 작업)이고 좀 더 명확하게이 작업을 수행하는 방법에 대한 몇 가지 통찰력 싶어요이를 정리하는 방법에 대한

# POST /administrators 
def create 
    @administrator = Administrators.new(params[:administrators]) 
    @administrator.ID = Administrators.all.length+1 

    respond_to do |format| 
    format.html 
    format.ext_json {render :json => @administrator.to_ext_json(:success => @administrator.save!)} 
    end 
end 

# PUT /administrators/1 
def update 
    attrs_to_update = "" 
    params[:administrators].each {|k,v| attrs_to_update += "#{k} = \'#{v}\', "} 
    attrs_to_update = attrs_to_update.strip.chomp(",") 
    sql = ActiveRecord::Base.connection() 
    sql.begin_db_transaction 
    sql.execute("SELECT * FROM Administrators WHERE ([Administrators].[id] = #{params[:id]})"); 
    sql.execute("UPDATE Administrators SET #{attrs_to_update} WHERE ([Administrators].[id] = #{params[:id]})"); 
    sql.commit_db_transaction 
    render :json => @administrator.to_ext_json(:success => @administrator.update_attributes!(params[:administrators])) 
end 

# DELETE /administrators/1 
def destroy 
    Administrators.delete(params[:id]) 
    head :ok 
end 

어떤 생각을? 아니면 왜 처음부터 상자에서 벗어나지 않았을까요? :)

BUMP :

정말요? 누군가는

+0

Joe의 예외 사본이 있습니까? 또한 SQL Server의 Id 열이 자동 증분 ID 필드로 설정되어 있는지 확인하십시오. 그렇지 않은 경우 문제가있을 수 있습니다. – wgpubs

+0

확실히 자동 증가로 설정되어 있습니다 ... –

+0

남자 ... 모든 해결 방법 * 필요하지 않습니다. 개인적으로 필자는 Rails 응용 프로그램을 SQL Server 데이터베이스에 연결하지 않았으므로 아마도 연결 제공자일까요? 호기심에서 당신의 설정은 어떻게 생겼습니까? Rails 응용 프로그램이 Windows 상자에서도 실행됩니까? – wgpubs

답변

1

이이 질문에 좋은 답변을하지 않습니다,하지만 난 그게 결론 생각 ...이 시도 할 수있어 :

  • MS SQL, ExtJS로하고 레일을 사용하지 마십시오하지 않는 한 굽기 시간과 돈을 그들과 협력하도록 노력하는 느낌. 대신 MySQL 또는 PostGRE를 사용해보십시오.