0

私のモデルには、次のような_form.html.erb部分があります。DailyEntry

<%= simple_form_for(@daily_entry) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :breakfast %>
    <%= f.input :snack_1 %>
    <%= f.input :lunch %>
    <%= f.input :snack_2 %>
    <%= f.input :dinner %>
    <%= f.input :water_intake %>
    <%= f.input :workout %>
    <%= f.input :notes %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

それぞれDailyEntryがに属していUserます...つまり、各daily_entryレコードにはuser_id列があります。

コントローラーのアクションを複製せずに、ページからcurrent_usera を追加できるようにしたいと思います。daily_entryHome#IndexcreateDailyEntry

では、どうすれば一石で二羽の鳥を殺すことができるでしょうか? つまり、新しく作成されたdaily_entryレコードを現在のユーザーに割り当ててから、これをすべて自分のviews/home/index.html.erb?

編集 1

各レコードをユーザーに割り当てる方法を知っています....DailyEntryコントローラーcreateアクションでは、これがあります:

def create
  @daily_entry = current_user.daily_entries.create(params[:daily_entry])

respond_to do |format|
  if @daily_entry.save
    format.html { redirect_to @daily_entry, notice: 'Daily entry was successfully created.' }
    format.json { render json: @daily_entry, status: :created, location: @daily_entry }
  else
    format.html { render action: "new" }
    format.json { render json: @daily_entry.errors, status: :unprocessable_entity }
  end
 end
end

からこれを行う方法がわかりませんHome#Index.html.erb。コントローラーのロジックを複製せずにこのフォームをレンダリングするにはどうすればよいHomeControllerですか?

編集 2

私もこれを試しました:

<%= render partial: "daily_entries/form", @daily_entry => current_user.daily_entries.build  %>

しかし、私はまだこのエラーが発生します:

NoMethodError at /
undefined method `model_name' for NilClass:Class

行で:

<%= simple_form_for(@daily_entry) do |f| %>
4

1 に答える 1

2

daily_entriesコントローラーのcreateアクションは、フォームアクションが指す場所であり、これは変更されません。

インデックスページにフォームをレンダリングするには@daily_entry、home_controllerでオブジェクトを作成するだけです。

# home_controller.rb
def index
    @daily_entry = DailyEntry.new
end

# home/index.html.erb
<%= render "daily_entries/form" %>
于 2013-03-09T23:48:17.513 に答える