2015-12-14 25 views
-1

我有https://github.com/talho/openphin/blob/master/app/controllers/admin/invitations_controller.rbRuby on Rails的new()方法不存儲值

修改副本的主要代碼主要是一樣的,但是我們的系統進行了升級幾個月回Rails的4.x和邀請系統不再有效。

有問題的方法是創建。我曾嘗試換出:

@invitation = Invitation.new(params[:invitation]) 

@invitation = Invitation.create(invitation_params) 

,創造

def invitation_params 
    params.require(:invitation).permit! 
end 

然而,這裏是我有:

invitation_params = { 「名」:」 Test「,」subject「:」test「,」body「:」test「,」organization_id「:」「,」author_id「:24448}

@invitation = {「id」:null,「name」:null,「body」:null,「organization_id」:null,「author_id」:null,「subject」:null,「created_at」:null,的updated_at「:空,」 lock_version「:0}

另外,如果我使用創造!那麼我的輸出誤差爲:

E, [2015-12-14T13:03:38.664099 #24385] ERROR -- : Validation failed: Author can't be blank (ActiveRecord::RecordInvalid) 

我可以使用任何指導/幫助,爲什麼一切都結束了爲空。

+0

這聽起來像AUTHOR_ID不包含在PARAMS [:邀請]哈希值。此屬性是否在您的控制器中列入白名單(可能使用名爲invitation_params的方法)?你確定author_id是從前一個動作或視圖傳遞過來的嗎? –

+0

是的。當我輸出參數[:邀請]時出現。只是因爲某種原因沒有設置。 –

+0

我想我需要查看控制器代碼和視圖模板,該模板傳遞了params [:invitation]哈希,以便有效地提供幫助。首先,只是事實上你已經使用字符串而不是符號來返回哈希值,null而不是nil,這與我期望從Rails params哈希和對象中得到的結果完全不同。 –

回答

2

您在撥打save!之前撥打電話return的方法。此外,你可能想閱讀關於Strong Parameters。您可能希望將您的代碼更改爲:

@invitation = Invitation.new(
    params.require(:invitation).permit( 
    :name, :subject, :body, :organization_id, :author_id 
) 
) 
@invitation.save! 

render :json => { :invitation => @invitation }.as_json 
return 

請注意,您通常不需要在控制器方法中調用return。而當你new後立即撥打save!然後create!可能是一個更好的選擇:

def create 
    invitation = Invitation.create!(invitation_params) 
    render json: { invitation: invitation }.as_json 
end 

private 

def invitation_params 
    params.require(:invitation).permit( 
    :name, :subject, :body, :organization_id, :author_id 
) 
end 
+0

渲染/返回位就是這樣,我可以輸出並查看params [:邀請]中的內容以及創建的邀請中設置的內容。我也嘗試將我的代碼更改爲您的代碼,但是當我提出邀請時,我仍然對我的所有值都爲空。這是我的輸出: {「邀請」:{「id」:null,「name」:null,「body」:null,「organization_id」:null,「author_id」:null,「subject」:null , 「created_at」:null,「updated_at」:null,「lock_version」:0}} –

+0

如果Rails無法保存記錄,那麼'Invitation.create!(invitation_params)'行會引發異常。因此記錄必須是有效的和保存的,因爲沒有例外(否則你將無法返回json)。你能否用你的最新版本更新你的問題? – spickermann

+0

我已更新我的問題與最新版本。 –