ruby-on-rails – Rails 3 – 嵌套表单和默认值
发布时间:2020-12-17 02:29:01 所属栏目:百科 来源:网络整理
导读:我正在尝试创建包含rails中另一个模型的表单.我使用accepts_nested_attibutes完成了这项工作,并且它运行良好.问题是我在该表中有一个额外的字段记录每个注释的用户名,我不确定如何在创建新注释时插入该信息.应用程序控制器使用“current_user”方法提供用户
我正在尝试创建包含rails中另一个模型的表单.我使用accepts_nested_attibutes完成了这项工作,并且它运行良好.问题是我在该表中有一个额外的字段记录每个注释的用户名,我不确定如何在创建新注释时插入该信息.应用程序控制器使用“current_user”方法提供用户名.
问候, 评论模型 class Comment < ActiveRecord::Base belongs_to :post before_save :set_username private def set_username self.created_by = current_user end end 应用程序控制器(这只是一个沙盒应用程序所以我只是在方法中放入一个字符串) class ApplicationController < ActionController::Base protect_from_forgery helper_method :current_user def current_user "FName LName" end end 显示视图 <p id="notice"><%= notice %></p> <p> <b>Title:</b> <%= @post.title %> </p> <div id="show_comments"><%= render 'comments' %></div> <div id="add_comments"> Add Comment <%= form_for @post,:url => {:action => 'update',:id => @post.id},:html => { :'data-type' => 'html',:id => 'create_comment_form' } do |f| %> <%= f.fields_for :comments,@new_comment do |comment_fields| %> <%= comment_fields.text_area :content %> <%end%> <div class="validation-error"></div> <%= f.submit %> <% end %> </div> 后控制器 def update @post = Post.find(params[:id]) respond_to do |format| if @post.update_attributes(params[:post]) @comments = @post.comments.all format.html { redirect_to({:action => :show,:notice => 'Post was successfully created.') } format.xml { render :xml => @post,:status => :created,:location => @post } else format.html { render :action => "new" } format.xml { render :xml => @post.errors,:status => :unprocessable_entity } end end end 解决方法
我原本以为你可以将它设置为模型中的默认值或before_save.但模型无法访问current_user.因此,最好只在控制器中设置当前用户.它并不像把它放在模型中那样干,但它不那么hackey并且这种方式可能有问题.
def update @post = Post.find(params[:id]) @post.attributes = params[:post] @post.comments.each do |comment| comment.created_by = current_user if comment.new_record? end respond_to do |format| if @post.save @comments = @post.comments.all format.html { redirect_to({:action => :show,:notice => 'Post was successfully created.') } format.xml { render :xml => @post,:location => @post } else format.html { render :action => "new" } format.xml { render :xml => @post.errors,:status => :unprocessable_entity } end end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |