如何使用预定义属性在Rails中创建新对象

时间:2011-03-02 10:15:55

标签: ruby-on-rails ruby-on-rails-3

我有一个包含大量页面的Rails应用程序,每个页面都有很多个人。在每个页面上都有一个链接,用于在该页面上创建新的convo。这是该链接的代码:

<%= link_to'New Convo',new_convo_path(:page => @page)%>

但是,在下一页上,“convo / new”页面属性为空。我错过了什么?

编辑这里是我的新设计和创建函数

   def new
    @convo = Convo.new(params[:page])

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @convo }
    end
  end



  # POST /convos
  # POST /convos.xml
  def create
    @convo = Convo.new(params[:convo])

    respond_to do |format|
      if @convo.save
        format.html { redirect_to(@convo, :notice => 'Convo was successfully created.') }
        format.xml  { render :xml => @convo, :status => :created, :location => @convo }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @convo.errors, :status => :unprocessable_entity }
      end
    end
  end

2 个答案:

答案 0 :(得分:2)

您需要加载页面...尝试设置过滤器之前...

before_filter :find_page

private
  def find_page
    @page = Page.find(params[:page_id])
  end

然后使用嵌套资源构建

def new
  @convo = @page.convos.build

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @convo }
  end
end

def create
  @convo = @page.convos.build(params[:convo])
  .....
end

答案 1 :(得分:2)

我的猜测是你错过了“:page =>”

def new
  @convo = Convo.new(:page=>params[:page])

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @convo }
  end
end