【问题标题】:How to come up with a view for one to many relation for two models in Rails 5如何在Rails 5中为两个模型提出一对多关系的视图
【发布时间】:2019-05-25 15:49:21
【问题描述】:

我正在尝试在 Rails 中建立一个模型与另一个模型之间的一对多关系,它已在控制台中工作,但我似乎无法在视图中正确实现它,以便我能够创建单个事件的更多图片(更多说明如下)

web应用的背景是,一个事件有很多事件图片,很多事件图片属于一个事件。我正在尝试在控制台和原理图中正确设置它,它似乎有效。当我尝试用视图实现它时,我无法让它工作。

    <%= form_with(model: [ @event, @event.event_pictures.build ], local: true) do |form| %>
  <p>
    <%= form.label :answer %><br>
    <%= form.text_field :answer %>
  </p>
  <p>
    <%= form.label :hint %><br>
    <%= form.text_field :hint %>
  </p>
  <p>
    <%= form.label :event_pics %>
    <%= form.file_field :event_pics, multiple: true %>
  </p>
  <p>
    <%= form.submit %>
  </p>
<% end %>

上面的代码是我的表单,这是问题的主要原因。错误如下所示。

undefined method `event_pictures' for nil:NilClass

控制台的东西在 Pastebin (https://pastebin.com/ESYAfMzE) 中有效。

控制器

def new
    render 'new'
  end
  def create
    @event = Event.find(params[:event_id])
    @event_picture = @event.event_pictures.create(event_picture_params)
    redirect_to event_path(@event_picture)
  end

**按钮创建新图片,在事件索引中,因此您可以在单击新图片按钮之前查看事件。 **

<%= button_to "new picture", {:controller => :event_picture, :action => 'new', :event_id => event.id},
              :method => :get,
              class: "btn btn-warning" %>

这相当令人沮丧,因为我还研究了使用 fields_for 而不是 form_with 的可能性,并多次检查了我的 schema.rb 和迁移以确保它正确链接。在这一点上,我真的很感激任何帮助,因为我已经花了几个小时研究这个问题。

非常感谢。

【问题讨论】:

  • 错误undefined method event_pictuures...表示@eventnil,这意味着Event.find没有找到与params[:event_id]匹配的事件。检查您的日志以了解 params[:event_id] 是什么。

标签: ruby-on-rails ruby ruby-on-rails-5 relationship entity-relationship


【解决方案1】:

我明白了,在您的 new 操作中,您需要设置 @event 实例变量:

def new
  @event = Event.find(params[:event_id])
end

【讨论】:

  • 您好@codenamev,谢谢您的回复,我设法发现传递的事件确实为零,我现在的问题是如何将事件ID传递给新的事件图片查看,所以我可以继续创建它
  • 你的事件索引迭代器是什么样的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多