如何在选择表单后调用模型上的方法

时间:2016-02-15 22:08:04

标签: ruby-on-rails

我正在尝试在选择菜单上进行选择后更新模型。

例如,如果选择是'se',我想调用一个更新当前用户配置文件的方法。

继承我的观点:

<h1>Profiles#new</h1>
<p>Find me in app/views/profiles/new.html.erb</p>

<%= simple_form_for @profile do |f| %>
<%= f.input :bio %>

<%= select_tag id="postcode"name="Areas Covered">
    <option value="se">Southeast London</option>
    <option value="nw">  </option>
    <option value="n">  </option>
    <option value="s">  </option>
  </select>
 <br><br>

<%= f.button :submit %>
<% end %>

如果调用'se',我将调用“se_london”辅助方法:

module ProfilesHelper

    def se_london
        se = Place.where('area2 LIKE ? AND postal_code LIKE ?', '%London%', '%se%')
        @profile.places << se
    end
end

我正在尝试在当前用户配置文件上调用该方法,但无济于事:

class ProfilesController < ApplicationController
  def new
    @profile = Profile.new

  end

  def create
    @profile = Profile.new(profile_params)
    if @profile.save
      if "value" == se
        @profile.se_london
      end
      redirect_to '/' 
    else
      redirect_to '/'
    end
  end

  def update
  end

  def edit
  end

  def destroy
  end

  def index
    @profile = Profile.all
  end

  def show
  end

如果相关,则Place模型与Profile模型属于且有很多关系。

1 个答案:

答案 0 :(得分:1)

最好了解如何使用select_tag here。你可以这样做:

<%= label_tag :areas_covered, "Areas Covered" %>
<%= select_tag :areas_covered, options_for_select(['se', 'nw', 'n', 's']) %>

这会将选择放在params哈希中params[:areas_covered]。然后,从控制器,你可以做:

@profile.se_london if params[:areas_covered] == 'se'

就目前而言,在您的控制器中,您正在测试字符串“value”是否等于变量,或者是名为se的方法的返回值,它甚至没有定义据我所知。该测试永远不会通过,甚至会抛出错误。