2014-01-09 32 views
0

我最近完成了Rails教程,现在我正在开发我的第一个应用程序。推进迷雾的迷雾Rails - 隐藏模型属性_Form

我想创建一个附加到用户的“事件”。

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 /家”。我希望它分不清什么是错的,这样用户就可以纠正

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的教程进行修改。

回答

1

很简单。就像你在范围内的第一个例子中的事件到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[:success] = "Event created!" 
redirect_to events_path 

变为

redirect_to events_path, success: "Event created!" 
1

你就不能添加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表单助手将填写以前提交的详细信息。