我目前正在为一个项目构建一个半小的ruby应用程序。我目前面临的问题如下:
我希望能够将文章纳入类别。我已经通过拥有两个模型来实现这一目标。具有category_id外键的文章模型和具有类别名称的Category模型。使用has_one和belogs_to关系。 (我们假设您只能将一篇文章整合到一个类别中)。这是一段代码。
这是一种新方法,我创建一篇新文章并加载所有类别。
def new
@article = Article.new
@categories = Category.find(:all)
end
当我尝试从组合框中获取类别以便将其与文章一起插入时,问题就出现了。
这是组合框代码:
f.select(:category_id,@categories)
这是创建方法:
def create
@category = Category.find(params[:id])
@article = @category.articles.new(params[:article])
if @article.save
flash[:notice] = "Article Submitted Sucessfully"
redirect_to user_path
else
render :action => 'new'
end
end
我相信当我尝试加载所选类别“@category = Category.find(params [:id])”时,我遇到的问题就在这一行中,因为每当我将此行硬编码为
@category = Category.find(1)
完美无缺
答案 0 :(得分:2)
问题在于f.select。第二个参数不会将选项列表的值设置为类别的ID。表单构建器的选择方法有点缺乏。我会这样做:
<%= collection_select :article, :category_id, @categories, :id, :name, @article.category_id %>
并且应该为控制器获得正确的值。
然后在控制器中,您可以替换:
@category = Category.find(params[:id])
@article = @category.articles.new(params[:article])
带
@article = Article.new(params[:article])
category_id将来自参数并正确设置。