0
enter code here

<h1>Add New Investment Opportunity</h1>

<%= form_for Investopp.new do |f| %>

<div class="field">
<%= f.label :state_id %><br/>
<%= f.collection_select  :state_id, Investopp.year_lookup(@state_ids), :label, :value, include_blank: true %>
</div>

<div class="field">
<%= f.label :city_id, "city" %><br />
<%= f.grouped_collection_select :city_id, Investopp.year_lookup(@state_ids), :cities, :value, :id,:name, include_blank: true %>
</div>
<% end %>
<%= link_to 'Back', investopps_path %>
<%= link_to 'Search', investopps_browsedisplay_path %>


class Investopp < ActiveRecord::Base
attr_accessible :Address, :Buildingname, :Desiredinvrole, :Details,   :Prefferednoofinvestors, :Salesprice, :Weblisting, :photo, :user_id, :state_id, :city_id, :state, :city
has_attached_file :photo, :styles => { :small => "200x200>" }
belongs_to :user
validates :Buildingname, presence: true
validates :Address, presence: true
validates :Desiredinvrole, presence: true
validates :Weblisting, presence: true
validates :Details, presence: true
has_many :states
has_many :cities
def find_state(id)
  if !id  || id==0
      id=1
  end

  @states= State.find(id)
  @states.name

end
def find_city(id)
  if !id  || id==0
      id=1
  end

  @cities= City.find(id)
  @cities.name

end

def self.year_lookup(state_ids)

#create an emptycollection to hold the LabelValue Objects
years = []

state_ids.each do |yr| y = LabelValue.new()
y.label = yr
y.value = State.find_by_id(yr).name
years.push(y)
end

years

end

def self.state_lookup(state_ids)
years = []

state_ids.each do |yr| y = State.new()
 y= State.find_by_id(yr)
years.push(y)
end

years

end 

end

class LabelValue
# name the accessors. Label and Value
attr_accessor :label, :value


def cities
cityids=[]
state_cities=[]

investopps=Investopp.find(:all)
investopps.each do |i|
puts i.city_id
cityids <<i.city_id
end
cityids.uniq!

states=State.find_by_id(label)
cityids.each do |c|
if states.cities.find_by_id(c)
state_cities<< states.cities.find_by_id(c)  
end

end

state_cities
end

end


class InvestoppsController < ApplicationController
# GET /investopps
# GET /investopps.json
def index
@investopps = Investopp.where(:user_id => current_user.id)

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @investopps }
end
end

# GET /investopps/1 # GET /investopps/1.json def 显示

@investopp = current_user.investopps.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @investopp }
end
end

# GET /investopps/new # GET /investopps/new.json def new @investopp = Investopp.new

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @investopp }
end
end

# GET /investopps/1/edit def edit @investopp = Investopp.find(params[:id]) end

# POST /investopps # POST /investopps.json def 创建

#params[:investopp][:state_id]= "gopi"
#params[:investopp][:city_id]= "33" 
@investopp = current_user.investopps.build(params[:investopp])

respond_to do |format|
  if @investopp.save
    format.html { redirect_to @investopp, notice: 'Investopp was successfully created.'    }
    format.json { render json: @investopp, status: :created, location: @investopp }
  else
    format.html { render action: "new" }
    format.json { render json: @investopp.errors, status: :unprocessable_entity }
  end
end

结尾

# PUT /investopps/1 # PUT /investopps/1.json def update @investopp = Investopp.find(params[:id])

respond_to do |format|
  if @investopp.update_attributes(params[:investopp])
    format.html { redirect_to @investopp, notice: 'Investopp was successfully updated.'   }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @investopp.errors, status: :unprocessable_entity }
  end
end

结尾

# 删除 /investopps/1 # 删除 /investopps/1.json def destroy @investopp = Investopp.find(params[:id]) @investopp.destroy

respond_to do |format|
  format.html { redirect_to investopps_url }
  format.json { head :no_content }
end

结尾

def lis
@state_names=[]
@state_ids=[]
@city_ids= []
@city_names=[]
@investopp = Investopp.find(:all)
@investopp.each do |item|
  @state_names<< State.find_by_id(item.state_id).name
  @state_ids<< item.state_id
  @city_names<< City.find_by_id(item.city_id).name
  @city_ids << item.city_id
end
puts  @state_ids.uniq!{|i| i}
puts  @city_ids.uniq!{|i| i}

puts "gopi"
respond_to do |format|
  format.html { render "investopps/lis", :locals => { :state_ids => @state_ids, :city_ids => @city_ids, :investopps =>  @investopp } }
  format.json { render json: @investopp }
end

结尾

结尾

4

1 回答 1

0

而不是使用,<%= link_to 'Search', investopps_browsedisplay_path %>您应该<%= f.submit %>正确使用并指定操作。因此,您的表单视图将如下所示:

<h1>Add New Investment Opportunity</h1>

<%= form_for Investopp.new, :action => investopps_browsedisplay_path do |f| %>

<div class="field">
<%= f.label :state_id %><br/>
<%= f.collection_select  :state_id, Investopp.year_lookup(@state_ids), :label, :value, include_blank: true %>
</div>

<div class="field">
<%= f.label :city_id, "city" %><br />
<%= f.grouped_collection_select :city_id, Investopp.year_lookup(@state_ids), :cities, :value, :id,:name, include_blank: true %>
</div>
<%= link_to 'Back', investopps_path %>
<%= f.submit 'Search' %>
<% end %>

然后你还需要一个控制器方法来处理investopps_browsedisplay_path路由,我在任何地方的代码中都看不到。当然,这不是一种 RESTful 方式来处理这个问题,并且需要注意的是,您的架构可能会混淆问题,但就发送表单数据而言,正确的方法是使用表单提交,而不是一个link_to,它解决了手头的基本问题。

于 2013-07-28T21:25:15.517 回答