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_user能够daily_entryHome#Index页面添加一个 - 无需复制create我的DailyEntry控制器的操作。

那么如何用一块石头杀死两只鸟呢?即将新创建的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 回答