2015-10-07 161 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

祝您有个美好的一天!

相关问题