保存Ruby on Rails

问题描述:

我是Ruby on Rails的新手,并且在保存数据时遇到问题。除published之外的所有项目都被保存,但我不知道为什么。保存Ruby on Rails

这里是我的形式:

<% form_for :product, @product do | fld | %> 
    <span class="notice"><% if @product.errors.any? %><p class="error"><%= @product.errors.first[1] %></p><% end %></span> 
    <table class="tbl-form" cellpadding="0" cellspacing="0"> 
     <tbody> 
     <tr> 
      <td class="name" width="100">Code:</td> 
      <td colspan="99"><%= fld.text_field :product_code, :class => "large" %></td> 
     </tr> 
     <tr height="5"/> 
     <tr> 
      <td class="name" width="100">Name:</td> 
      <td colspan="99"><%= fld.text_field :name, :class => "large" %></td> 
     </tr> 
     <tr height="5"/> 
     <tr> 
      <td class="name" width="100">Start Week:</td> 
      <td colspan="99"><%= fld.select :start_week, options_for_select(StockMovement.order("year DESC, week DESC").map { | val | [ "#{ val.year }/#{ val.week }", val.id] }, :selected => @product.start_week), :class => "ddl_SW" %></td> 
     </tr> 
     <tr height="5"/> 
     <tr> 
      <td class="name" width="100">Category:</td> 
      <td colspan="99"><%= fld.select :product_category, options_for_select(ProductCategory.where("jos_product_category.published = 1").all.map { | val | [ val.name, val.id] }, :selected => @product.product_category)%></td> 
     </tr> 
     <tr height="5"/> 
     <tr> 
      <td class="name">Thumbnail:</td> 
      <td colspan="99"><%= fld.text_field :thumbnail, :class => "large" %></td> 
     </tr> 
     <tr height="5"/> 
     <tr> 
      <td class="name">Original Image:</td> 
      <td colspan="99"><%= fld.text_field :original_image, :class => "large" %></td> 
     </tr> 
     <tr height="5"/> 
     <tr><td class="name">Publish:</td><td><span id="yesno"><%= fld.check_box :published, :class => "hide-chk" %><a id="true" alt="1" rel="product_published" class="yes">Yes</a><a id="false" alt="0" rel="product_published" class="no on">No</a></span></td></tr> 
     <tr height="25"/> 
     <tr class="btn-holder"> 
      <td colspan="99"> 
      <input type="image" src="/images/btn-save.png" class="img-btn"><a href="<%= admin_products_path %>" class="lnk-btn back">Back</a> 
      </td> 
     </tr> 
     <tr height="5"/> 
     </tbody> 
    </table> 
    <% end %> 

这里是我的控制器:

def new 
    @product = Product.new 

    if request.post? and params[:product] 
     @product = Product.new(params[:product]) 
     @product.creator = logged_user['clientID'] 

     if @product.save 
     #render :json => params[:product] 
     redirect_to admin_product_show_url(:productID => @product.id), :notice => '<p class="success">You have successfully added a new product '"#{ @product.name }"'</p>' 
     end 
    end 
    end 
+0

指定发生错误以获得正确答案。 – 2012-07-27 08:09:38

+0

如果你分析我的表单..我的领域选择哪个发布没有保存。除已发布的 – Lian 2012-07-27 08:18:09

您需要的create操作添加到您的控制器,它应该是的动作的终点形式:

def create 
    @product = Product.new(params[:product]) 
    if @product.save 
    # set flash and redirect to somewhere 
    else 
    # set flash.now with a short message 
    # and render the form here again (render :new) 
    end 
end 
+0

以外,所有字段都已保存了解底层接触点非常重要。请求新的命中控制器中的新操作,该操作返回包含表单的HTML。当用户提交表单时,POST请求会触发控制器的创建操作。创建操作在数据库中创建东西并将您重定向到下一页。如果创建失败,那么它将返回包含原始表单的HTML,其中包含填充值和内联错误消息,供您再次提交。失败后的下一次提交会再次结束创建操作。 – 2012-07-27 08:22:56

+0

同样的故事...它保存但不是发布.. – Lian 2012-07-27 08:31:41

+0

你调查/分析了开发日志吗?接受的属性是什么?数据库中保存的值是什么(全部记录)。您是否在保存前预处理模型属性?你的模型中有attr_protected/attr_accessible吗? – 2012-07-27 08:43:27