2013-07-18 36 views
0

我有一個對象,在我的rails應用程序中表現得非常奇怪。更新控制器方法中的參數屬性

2我的控制器方法是相關的。

def index 
    @user_vacation_days = UserVacationDay.all 
    end 

真的很簡單。

def create 

    params[:user_vacation_day][:user_id] = current_user.id 
    params[:user_vacation_day][:user] = current_user # supplementary  

    @user_vacation_day = UserVacationDay.create(params[:user_vacation_day]) #user_vacation_day 
    @user_vacation_day.update_attributes(user: current_user) 

    if @user_vacation_day.persisted? 
     flash[:notice] = "Request Sent" 
     redirect_to dashboard_index_path 
     #UserVacationDayMailer.request_vacation_days(@user_vacation_day.id).deliver 

    else 
     flash[:notice] = "Something went wrong, please try again" 
     render :new 
    end 

    end 

這一個是棘手。行

params[:user_vacation_day][:user_id] = current_user.id 
params[:user_vacation_day][:user] = current_user 

行爲不當。當我進入我的Rails控制檯,然後輸入

UserVacationDay.all 

我得到

[#<UserVacationDay id: 34, user: nil, description: "work!", response: nil, response_description: "placeholder", created_at: "2013-07-18 15:46:07", updated_at: "2013-07-18 16:29:24", state: "denied", number_of_days_off_requested: 100, user_id: 1>] 

通知用戶如何爲零。它不應該是,我不明白爲什麼。令我瘋狂的事情是我的索引表。它顯示所有休假日的請求。下面的段實際上在瀏覽器中工作,並提交和一切都沒有明顯的錯誤。那就是:

- @user_vacation_days.each do |u| 
    #{u.user.full_name} has requested #{u.number_of_days_off_requested} vacation days 
    %br 
    "#{u.description}" 
    %br 
    .btn-group 
    %button.btn.btn-primary.dropdown-toggle 
     = link_to "Respond", edit_user_vacation_day_path(u) 

它讓我打電話u.user.full_name,這是與調用@ user_vacation_day.user.full_name。

我不知道爲什麼這是發生在索引方法,但不是創建方法。謝謝!

+0

爲什麼你有兩個'user'和'user_id'?如果'UserVacationDay belongs_to:user',我非常確定rails會被'user'和'user_id'屬性混淆。通常,如果您執行'@user_vacation_day.user = current_user',則會將'user_id'設置爲'current_user'的'user_id'。 – theIV

+0

我認爲你是對的,我想只有user_id。問題是,我不知道如何從user_id獲取用戶對象。 Rails控制檯簡單地返回用戶ID號 – Mike

+0

如果從模型中刪除'user'屬性並設置一個'belongs_to'關聯(就像我上面提到的那樣),執行'@ user_vacation_day.user'將返回'User'對象,而不僅僅是id。 – theIV

回答

1

實現你create動作可能是這方面的一個更好的辦法:

def create 
    @user_vacation_day = UserVacationDay.new(params[:user_vacation_day]) 
    @user_vacation_day.user = current_user 

    if @user_vacation_day.save 
    flash[:notice] = "Request Sent" 
    redirect_to dashboard_index_path 
    else 
    flash[:notice] = "Something went wrong, please try again" 
    render :new 
    end 
end 
+0

您正在使用.new而不是.create。這是正確的嗎?我很抱歉,我對rails很新,我認爲create是實際構建對象並將其添加到數據庫的方法 – Mike

+0

'new'創建對象,但尚未將其保存到數據庫。然後,您可以設置'user'參數並使用'@ user_vacation_day.save'保存它。這使得動作只向數據庫發送一條INSERT語句,並且通常如何在Rails中實現'create'動作。 – henrikhodne

相關問題