[英]Rails - Hidden Model Attributes _Form
我最近完成了Rails教程,现在我正在开发我的第一个应用程序。 推动混乱的迷雾
我想创建一个附加到用户的“事件”。
def create
@event = current_user.events.build(params[:event])
if @event.save
flash[:success] = "Event created!"
redirect_to events_path
else
@feed_items = []
render 'static_pages/home'
end
end
有了这个,我可以创建一个附加到用户的“事件”,但是当我构建它时,它会将错误的属性(否则)发送给'static_pages / home'。 我希望它告诉用户什么是错的,这样他们才能纠正
def create
@event = Event.new(params[:event])
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html { render action: "new" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
通过此设置,我必须指定事件附加到哪个用户。
如何在将错误发送回表单时自动将事件附加到特定用户的中位数?
谢谢
大部分代码都是从Rails教程中修改的。
很简单。 就像在第一个示例中将事件范围current_user
为current_user
一样,在第二个示例中执行相同的操作:
def create
@event = current_user.events.build(params[:event])
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html { render action: "new" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
也就是说,你的设置有些奇怪。 一般来说,编写create
动作的惯用方法是创建对象,尝试并保存它。 如果成功保存,您将重定向到您希望用户前往的位置。 否则,您再次渲染表单。
这对你意味着什么? 那么,使用你的第一个例子:
def create
@event = current_user.events.build(params[:event])
if @event.save
flash[:success] = "Event created!"
redirect_to events_path
else
@feed_items = []
# Change the following line to render the page that the event form is contained at
# This way can render any errors and display the form again
render 'static_pages/home'
end
end
另外,您可以使用相同的方法重定向和添加Flash:
flash[:success] = "Event created!"
redirect_to events_path
变
redirect_to events_path, success: "Event created!"
你不能只是将current_user添加到代码中,如下所示:
def create
@event = current_user.new(params[:event])
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html { render action: "new" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
如果您需要添加feed_items数组,可以这样做:
def create
@event = current_user.new(params[:event])
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html {
@feed_items = []
render action: "new"
}
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
请注意, redirect_to
将重定向浏览器,您将失去表单参数的范围。 render
不会重定向,而是告诉控制器渲染“新”视图。 “新”视图包含表单,因此这会将表单保留在范围内,并且Rails表单帮助程序将填充先前提交的详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.