2015-10-07 155 views
0

我正在製作一個庫應用程序,它有兩個模型BookSuggestionSuggestion模型用於建議要添加到圖書館的書籍。如何將對象從一個控制器傳遞到另一個控制器

現在在Suggestion模型中,我添加了一種檢索書籍的方法,並且希望將此書添加到數據庫中。

守則上面如下:

Suggestion.rb

def get_book 
     h = as_json 
     h.delete("id") 
     h.delete("created_at") 
     h.delete("updated_at") 
     return Book.new(h) 
    end 

SuggestionController.rb

def approve 
@book = @suggestion.get_book 
    redirect_to @book, notice: "Book was successfully added into the database" 

但由於@book尚未分配的id,它不能r將其轉發。

所有其他控制器和模型都通過腳手架啓動。

我應該如何保留建議中包含的信息並將其傳遞給書籍控制器以添加到數據庫中。

回答

1

您可以重定向到新書,而不是新創建。新書屬性可以通過redirect_to通過,例如:

redirect_to new_book_path, notice: "Book was successfully added into the database", new_book: @book.to_json 

而且在new方法檢查new_book參數:

def new 
    if params[:new_book].nil? 
     # usual behavior 
    else 
     @book = Book.new(params[:new_book]) 
    end 
end 
0

不是真的有關,但希望能幫助你擁有更有效的代碼。

def get_book 
    h = as_json 
    h.delete("id") 
    h.delete("created_at") 
    h.delete("updated_at") 
    return Book.new(h) 
end 

istead你可以寫

def get_book 
    Book.new as_json.except(*[:id, :created_at, :updated_at]) 
end 

,只是備案:請不要在控制器使用@var如果你只是重定向。如果您在模板內使用它們,只能使用@var

祝您有個美好的一天!

相關問題