0
私は資源としての私のアルバムのモデルをマッピングするために、私のroutes.rbをしてラインを持っているDataMapperの&レールとリダイレクトは
format.html { redirect_to(@album) }
原因リダイレクトへ:
albums/%23<Album:0x72d452c>
の代わり:
さらにコンテキストが必要な場合はalbums/1
、コントローラからの私の完全な作成方法は以下のとおりです:
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 %>
ワウ。それはうまくいった。しかし、なぜそれは機能しましたか?私の例では、 "%23"とは何ですか?それはアルバムオブジェクトの生の表現ではありませんか?ですから、to_paramメソッドを作成することで、オブジェクト表現の代わりにオブジェクトのidが確実に表現されるのですか?それはオブジェクトをこのコードとして表すデフォルトのto_paramメソッドがあるからです: "%23 "?素晴らしい。私はあなたがこれをどのように理解したかを知りたいです。あなたは本当にRailsの内部をかなりよく理解していなければなりません。 –
Baker
内部はrespond_toを行う必要がありますか? to_paramを呼び出す前に確認してください。これは、ルートメソッドも整数、配列、ハッシュを受け付けるからです。 %23は、ActiveRecordのようなオブジェクトがそのメソッドをオーバーライドしていない限り、Rubyがinspectメソッドでオブジェクトをどのように公開するかを示す#のURLエンコーディングです。あなたのDMモデルはARや配列、ハッシュではないので、おそらく文字列補間の一部として、オブジェクトに対してto_sを呼び出すだけです。 私はルートメソッドに送信していたオブジェクトを台無しにする機会があったので、以前にこの問題を見てきました。 –
austinfromboston
説明していただきありがとうございます。 – Baker