如何从显示页面更新我的rails模型的值?

时间:2015-09-23 22:47:54

标签: ruby-on-rails ruby

在我的rails应用程序中,我根据用户在新用户上输入的一些信息来猜测用户的性别。\ n'形成。之后,用户被带到显示页面,在那里我显示猜测。我希望用户告诉我我是对还是错所以我可以改进数据。我想要“是”'并且没有'按钮在哪里 '无'使用其他性别更新数据库中用户的记录。

这是我的节目视图

    <div class='container'>
    <header>We think you're.....</header>
    <div class='cmn-t-shake'>
        <%= @person.male ? "Male" : "Female"%>
    </div>
    <div>
        Were we right? <br/>
        <%= link_to 'Yes', '/people'%>
         | 
        <%= link_to 'No', 'people/flip_gender(@person)'%>
    </div>
    <div>
        <%= link_to 'Learn more', '/people'%>
    </div>
</div>

和我的控制器的片段

class PeopleController < ApplicationController
def index
    @men = Person.where("male = ?", true)
    @women = Person.where("male = ?", false)    
end

def new
    @person = Person.new
end

def show 
    @person = Person.find(params[:id]) 
end

def create
    @person = Person.new(person_params)
    @person.male = guessGender(@person)
    if @person.save
        path = '/people/' + @person.id.to_s
        redirect_to path
    else
        render 'new'
    end
end

def person_params
    params.require(:person).permit(:male, :height_in_inches, :weight_in_lbs)
end

def flip_gender(p)
    p = Person.find(params[:id]) 
    person.gender = !p.flip_gender
    p.save
end

和我的routes.rb

  root 'people#new'

  get 'people' => 'people#index'
  get 'people/new' => 'people#new'
  post 'people' => 'people#create'
  get 'people/:id' => 'people#show'

如何通过点击按钮/链接,使用flipGender更新并在显示页面上保存当前记录?

1 个答案:

答案 0 :(得分:2)

你可以让flipGender成为一个帮助方法,让它可以从视图中访问:

def flip_gender(p)
    p = Person.find(params[:id]) 
    person.gender = !p.flip_gender
    p.save
end

helper_method: flipGender

然后在你看来:

<% flipGender(p) %>

或类似的东西。您还可以为辅助方法创建一个文件,然后将其包含在ApplicationController中,以便这些方法可用,请查看this thread