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 show
@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 /编辑 def编辑 @investopp = Investopp.find(params [:id]) 端
#POST / investopps #POST /investopps.json def create
#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更新 @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
端
#DELETE / investopps / 1 #DELETE /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
端
端
答案 0 :(得分: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,它解决了手头的基本问题。