Helpful Information
 
 
Category: Ruby Programming
Ruby Newbie

Hi all,

Ruby and I are having a hard time bonding. I have a very basic question, and I hope that someone would be willing/able to assist me.

I have a simple web form where users may search by case number. I have my Controller set up to take a parameter, and query the DB with it. It appears that the parameter is getting set, but apparently the syntax I am using to query with is wrong. I am able to return a record when I hard-code a case number into the query statement, but not when I use a variable.

Now, if I were in php, this would be a breeze to solve... echo the value of the parameter to make sure it's getting set...echo the value of the query statement and make sure it's correct. Problem solved. Unfortunately, I don't know how to do even these simple error-checks in Ruby, and the books I have read are vague on this topic, to say the least.

Since Ruby is new here, I'll wait for a response before I start posting code snippetts of what syntax I've tried. I hope there are some Ruby humans out there that I can mingle with.

Thanks in advance!! ~Snow

This is specifically a rails question. please put that in the title in future.

I'm not a rails guy, but i'm very much a ruby guy. Can we see some code please?

My apologies - as I said, I'm a newbie...

This page - search.rhtml - is where user enters case number to search by. Calls the 'list' method in the case_controller.rb.


<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<h1 align="center">Case Search</h1>
<h3 align="center"><font color="red">*</font>&nbsp;Indicates required field</h3>
</head>

<body>

<form action='https://forums.devshed.com/archive/index.php/list' method='post'>
<table border="0" align="center" cellspacing="5" cellpadding="3" bgcolor="#DEBDDE">
<tr>
<td nowrap align="right">CASE ID:</td>
<td><input type="text" name="case[case_id]"></td>
</tr>
<tr>
<td align="right">ENTRY DATE:</td>
<td><input type="text" name="case[entry_date]"></td>
</tr>
<tr>
<td align="right">NAME:</td>
<td><input type="text" name="case[l_name]" size="20">
<input type="text" name="case[f_name]" size="20"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Query"></td>
</tr>
</table>
</form>
</body>
</html>

case_controller.rb:


class CaseController < ApplicationController
layout "cor_footer"
scaffold :case

def list

@case = @params['case_id']

@case_search =
Case.find(:all,
:conditions => ["case_id = @case", @params])


end

Which should display results in list.rhtml:


<h2> Listing Search Results </h2>

<table border=1 cellpadding=5>

<tr>

<td width="20%"><p align="center"><i><b>Case ID</b></i></td>
<td width="60%"><p align="center"><i><b>Name</b></i></td>
<td width="20%"><p align="center"><i><b>Entry Date</b></i></td>

</tr>


<% if (@case == nil) || (@case == code.case_id) %>
<% @case_search.each do |code| %>

<tr>

<td>&nbsp;<%= code.case_id %></td>
<td>&nbsp;<%= code.l_name %></td>
<td>&nbsp;<%= code.entry_date %></td>

</tr>


<% end %>
<% end %>
</table>

As mentioned, I hit the table fine when I hard-code a value, like so:


@case_search = Case.find(:all, :conditions => "case_id = '28493'")



So, I'm guessing that the trouble lies here somewhere:


def list
@case = @params['case_id']

@case_search = Case.find(:all,
:conditions => ["case_id = @case", @params])
end

Thank you for helping!

You need to have it interpolate the values..

"case_id = '#@case'"

If it's not a package, global or class variable you need to do #{variable} so ruby knows.

edit: I also wrapped some quotes around it. I believe rails handles escaping for you, but i'm no rails guy.

Thanks for the suggestion.

I tried this:


def list


@case = @params['case_id']
@case_search = Case.find(:all, :conditions => "case_id = '#{@case}'")



end

Still no dice. I tried it with and without curlies. Perhaps my problem lies elsewhere. I'm only making the assumption that it is picking up my param value, because when I have a syntax error, it shows the value of case_id - but perhaps it is not passing it to the controller. Do you know of a way to echo the param value to the screen so I can see what I'm passing?

there's a flash command in rails i think, probably under another name

you could flash it.

Ok, that helped alot! I now know that my param is not getting set correctly. SO - my next question for you is, do you know the difference between these syntax?


@case = @params['case_id']

@case = @params[:case_id]

I have seen them written both ways, and I'm thinking that they are interchangable, but I'm not sure?

They are interchangeable.

The first form is a string, you know that. The second form is a symbol. The idea is that if you use a string many times, you should convert it to a symbol. When ruby gets bytecode compilation down, it will save some memory by only storing it once.

Well, it's still not getting the param into the variable. I put a flash on my list.rhtml page, and the var is empty.

Do you see anything else in my HTML or anywhere else that may throw a red flag at you? I'm running out of ideas!

Well i had presumed rails required you give those names... however i'm tempted to change them to static values at least as a test...

<input type="text" name="case_id">

Like i said, i'm not a rails guy, so sh!t may break.

Well, believe or not, that worked! You're right, the reason I had named it that way was because when I was trying to load combo boxes in a different form, Rails wouldn't recognize the field unless it was associated with the table name...sheesh.
Wonder how that's going to work when I need to get combo box values back? Oh well - cross that bridge when I get to it I guess.

Thanks for your help and suggestions.
~Snow W.










privacy (GDPR)