我正在编写一个简单的 rails 应用程序,我目前有 2 个模型 Location User,它们与 Message 模型具有相同的关系。即Location有很多消息,User有很多消息,Message属于User和Location。我目前正在尝试添加一个表单以在我的位置显示视图上创建一条新消息。这是一些代码:
app/views/locations/show.html.erb:
<h1><%= @locaton.name %></h1>
<p><%= @location.location %></p>
<p><%= @location.discription %></p>
<%= link_to "Find a Different Location", crags_path %>
<h2> Messages
<ul>
<% @location.messages.each do |message|%>
</li>
<h3><%=message.user.username%></h3>
<p><%=message.content%></p>
</li>
<% end %>
</ul>
位置控制器:
class LocationsController < ApplicationController
def index
@locations = Location.all
end
def show
@location = Location.find(params[:id])
end
def new
@Location = Location.new
end
def create
@location = Location.new(
name: params[:location][:name],
location: params[:location][:location],
discription: params[:location][:discription])
@location.save
flash.notice = "#{@location.name} Created!"
redirect_to location_path(@crag)
end
def edit
@location = Location.find(params[:id])
end
def update
@location = Location.find(params[:id])
@location.update_attributes(params[:location])
flash.notice = "#{@location.name} Updated!"
redirect_to crag_path(@location)
end
def destroy
@location = Location.find(params[:id])
@location.destroy
flash.notice = "#{@location.name} deleted."
redirect_to locations_path
end
end
消息控制器
class MessagesController < ApplicationController
def new
@message = Message.new
end
def create
@message = current_user.messages.build(
content: params[:message][:content])
redirect_to crags_path
end
end
我试图包含在 location/show.html.erb 中的部分表单
<%= form_for(@message) do |f| %>
<p>
<%= f.label "Leave a Message" %>
<%= f.text_area :content %>
</p>
<%= f.submit "submit" %>
<% end %>
当我尝试包含部分内容时,出现以下错误
undefined method `model_name' for NilClass:Class
我假设表单正在尝试与位置控制器通信,因为它位于位置视图中,并且由于它无法在位置控制器中找到实例@message,因此它不知道该怎么做。我正在尝试弄清楚如何将消息控制器中的此表单包含在位置视图中。如果我为 new_message_path 创建一个视图,它工作正常,我再次猜测,因为它在消息视图中运行,所以它引用回消息控制器。
我还想知道是否有任何方法可以创建一条消息,该消息既链接到 current_user 又链接到表单所在的位置(或者希望当我找出最后一个问题时。消息对象具有 location_id 属性,怎么做我使用我当前所在的页面(带有 url /locations/location_id)将消息链接到该位置?谢谢!