ruby-on-rails – Rails为具有多对多关系的模型创建表单
发布时间:2020-12-17 02:33:54 所属栏目:百科 来源:网络整理
导读:我有两个模型,Recipe和Tag,具有has_and_belongs_to_many关系.对于这种关系,我有一个简单的连接表,RecipesTags. 食谱: has_and_belongs_to_many :tags 标签: has_and_belongs_to_many :recipes 现在,在创建新配方时,用户可以以复选框的形式填写配方所属的类
我有两个模型,Recipe和Tag,具有has_and_belongs_to_many关系.对于这种关系,我有一个简单的连接表,RecipesTags.
食谱: has_and_belongs_to_many :tags 标签: has_and_belongs_to_many :recipes 现在,在创建新配方时,用户可以以复选框的形式填写配方所属的类别,例如“肉”,“鱼”等.这些类别实际上只是数据库中的标签. 问题:食谱没有保存任何标签. 配方新建并创建控制器方法: def new @recipe = Recipe.new @ingredients = Ingredient.all @tags = Tag.all respond_to do |format| format.html # new.html.erb format.json { render json: @recipe } end end # POST /recipes # POST /recipes.json def create @recipe = Recipe.new(params[:recipe]) if (params[:tags]) @recipe.tags << params[:tags] end respond_to do |format| if @recipe.save format.html { redirect_to @recipe,notice: 'Recipe was successfully created.' } format.json { render json: @recipe,status: :created,location: @recipe } else format.html { render action: "new" } format.json { render json: @recipe.errors,status: :unprocessable_entity } end end end 风景: <%= form_for(@recipe,:html => {:multipart => true}) do |f| %> <% if @recipe.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@recipe.errors.count,"error") %> prohibited this recipe from being saved:</h2> # [ fields that get's saved for the recipe and works fine ] <% @tags.each do |t| %> <%= f.label t.name %> <%= f.check_box :tags,t.name %> <br /> <% end %> <%= f.submit 'Submit recipe',:class => 'btn btn-primary' %> <% end %> 目前,我收到一条错误消息: “肉”是标签名称. 那么,我在这里做错了什么? 解决方法
我认为问题是这行@ recipe.tags<< PARAMS [:标签].
您正在呼叫的关联方法<<接受一个对象(在这种情况下期望一个标记对象),但在这种情况下,你似乎可能正在传递一个字符串. 有关更多信息,此链接可能有用 http://guides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference,特别是在它引用集合<<(object,...)的情况下. 在你的控制器中,你需要做一些像@ recipe.tags<< tag其中tag是特定的标记对象. 所以,试试这个: 在你的控制器中 params[:tags].each do |k,v| @recipe.tags << Tag.find(k) end 在你看来 <% @tags.each do |t| %> <%= f.label t.name %> <%= f.check_box "tags[#{t.id}]" %> <br /> <% end %> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |