如何将对象从一个控制器传递到另一个控制器
问题描述:
我正在制作一个库应用程序,它有两个模型Book
和Suggestion
。 Suggestion
模型用于建议要添加到图书馆的书籍。如何将对象从一个控制器传递到另一个控制器
现在在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将其转发。
所有其他控制器和模型都通过脚手架启动。
我应该如何保留建议中包含的信息并将其传递给书籍控制器以添加到数据库中。
答
您可以重定向到新书,而不是新创建。新书属性可以通过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
答
不是真的有关,但希望能帮助你拥有更有效的代码。
的
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
。
祝您有个美好的一天!