0

我的 routes.rb 中有一行将我的专辑模型映射为资源:

  map.resources :albums

但是,在 Rails 中使用 Datamapper 代替 ActiveRecord,为什么会这样:

format.html { redirect_to(@album) }

导致重定向到:

albums/%23<Album:0x72d452c>

代替:

albums/1

如果需要进一步的上下文,这里列出了我从 Controller 中创建的完整方法:

  def create
    @album = Album.new(params[:album])

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

按照惯例,这个方法是作为我在 new.html.erb 中的“新”方法提交表单的结果调用的:

<h1>New album</h1>

<% form_for(@album) do |f| %>

  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :description %><br />
    <%= f.text_field :description %>
  </p>
  <p>
    <%= f.label :genre %><br />
    <%= f.text_field :genre %>
  </p>
  <p>
    <%= f.label :country %><br />
    <%= f.text_field :country %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', albums_path %>
4

1 回答 1

3

Datamapper 是否支持一种to_param方法,或者您是否在 Album 模型上实现了一种方法?在我们拥有 Rails 3 和“ActiveORM”层来掩盖 ORM 之间的差异之前,您必须确保您的代码符合类似于 AR 的 API。

如果有一种方法to_param,但仍然不起作用,请尝试使用老式方法:

format.html { redirect_to(album_path(@album.id)) }

更笨重但很可能有效。

于 2009-06-08T01:41:59.973 回答